On Mon, Sep 14, 2020 at 04:55:31PM +0200, Arnd Bergmann wrote: > On Mon, Sep 14, 2020 at 4:37 PM Andy Shevchenko > <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > > > The introduced line even handling ABI in the commit > > > > 61f922db7221 ("gpio: userspace ABI for reading GPIO line events") > > > > missed the fact that 64-bit kernel may serve for 32-bit applications. > > In such case the very first check in the lineevent_read() will fail > > due to alignment differences. > > > > To workaround this introduce lineeven_to_user() helper which returns actual > > size of the structure and copies its content to user if asked. > > > > Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events") > > Suggested-by: Arnd Bergmann <arnd@xxxxxxxx> > > Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> > > Acked-by: Arnd Bergmann <arnd@xxxxxxxx> Thanks! > > diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c > > index e6c9b78adfc2..95af4a470f1e 100644 > > --- a/drivers/gpio/gpiolib-cdev.c > > +++ b/drivers/gpio/gpiolib-cdev.c > > @@ -423,6 +423,21 @@ static __poll_t lineevent_poll(struct file *file, > > return events; > > } > > > > +static ssize_t lineevent_get_size(void) > > +{ > > +#ifdef __x86_64__ > > + /* i386 has no padding after 'id' */ > > + if (in_ia32_syscall()) { > > Christoph Hellwig has recently suggested adding a new macro for this > that would be always available and just evaluate to false on other > architectures. > > I'd just merge your version for now and backport to to stable kernels, > but change this instance and a couple of others to use the new > macro in mainline afterwards. > > Incidentally that would also address CONFIG_OABI_COMPAT > mode, if anyone cares. Good to know (for both items). -- With Best Regards, Andy Shevchenko