[v1,1/2] gpiolib: Never return internal error codes to user space

Message ID 20210518155013.45622-1-andriy.shevchenko@linux.intel.com
State New
Headers show
Series
  • [v1,1/2] gpiolib: Never return internal error codes to user space
Related show

Commit Message

Andy Shevchenko May 18, 2021, 3:50 p.m.
Currently it's possible that character device interface may return
the error codes which are not supposed to be seen by user space.
In this case it's EPROBE_DEFER.

Wrap it to return -ENODEV instead as sysfs does.

Fixes: d7c51b47ac11 ("gpio: userspace ABI for reading/writing GPIO lines")
Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events")
Fixes: 3c0d9c635ae2 ("gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL")
Reported-by: Suresh Balakrishnan <suresh.balakrishnan@intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 drivers/gpio/gpiolib-cdev.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

Comments

Andy Shevchenko May 19, 2021, 7:45 a.m. | #1
On Wed, May 19, 2021 at 07:24:51AM +0800, Kent Gibson wrote:
> On Tue, May 18, 2021 at 06:50:12PM +0300, Andy Shevchenko wrote:
> > Currently it's possible that character device interface may return
> > the error codes which are not supposed to be seen by user space.
> > In this case it's EPROBE_DEFER.
> > 
> > Wrap it to return -ENODEV instead as sysfs does.

> > Fixes: d7c51b47ac11 ("gpio: userspace ABI for reading/writing GPIO lines")
> > Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events")
> > Fixes: 3c0d9c635ae2 ("gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL")

...

> You immediately revert this patch in patch 2.
> My understanding is that is not allowed within a patch set.

> Why split the patches instead of going direct to the new helper?

It's for backporting to make it easier. (I deliberately left the context above)

I can fold them if maintainers think it's okay to do.
Andy Shevchenko May 19, 2021, 8:30 a.m. | #2
On Wed, May 19, 2021 at 04:04:34PM +0800, Kent Gibson wrote:
> On Wed, May 19, 2021 at 10:45:16AM +0300, Andy Shevchenko wrote:
> > On Wed, May 19, 2021 at 07:24:51AM +0800, Kent Gibson wrote:
> > > On Tue, May 18, 2021 at 06:50:12PM +0300, Andy Shevchenko wrote:
> > > > Currently it's possible that character device interface may return
> > > > the error codes which are not supposed to be seen by user space.
> > > > In this case it's EPROBE_DEFER.
> > > > 
> > > > Wrap it to return -ENODEV instead as sysfs does.
> > 
> > > > Fixes: d7c51b47ac11 ("gpio: userspace ABI for reading/writing GPIO lines")
> > > > Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events")
> > > > Fixes: 3c0d9c635ae2 ("gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL")
> > 
> > ...
> > 
> > > You immediately revert this patch in patch 2.
> > > My understanding is that is not allowed within a patch set.
> > 
> > > Why split the patches instead of going direct to the new helper?
> > 
> > It's for backporting to make it easier. (I deliberately left the context above)
> > 
> > I can fold them if maintainers think it's okay to do.
> > 
> 
> Not sure what the constraints are on backporting, but wouldn't it be
> simpler and cleaner to backport the new helper?

Logically (and ideally) it would be three different patches:
 1) introduce helper
 2) use helper
 3) fix places where it's needed to be done

But the above scheme doesn't fit backporting idea (we don't backport new
features and APIs without really necessity). So, the options left are:

Option a: One patch (feels a bit like above)
Option b: Two patches like in this series (yes, you are correct about
          disadvantages)

> But, as you say, it is the maintainers' call.
Bartosz Golaszewski May 20, 2021, 1:02 p.m. | #3
On Wed, May 19, 2021 at 10:30 AM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
>

> On Wed, May 19, 2021 at 04:04:34PM +0800, Kent Gibson wrote:

> > On Wed, May 19, 2021 at 10:45:16AM +0300, Andy Shevchenko wrote:

> > > On Wed, May 19, 2021 at 07:24:51AM +0800, Kent Gibson wrote:

> > > > On Tue, May 18, 2021 at 06:50:12PM +0300, Andy Shevchenko wrote:

> > > > > Currently it's possible that character device interface may return

> > > > > the error codes which are not supposed to be seen by user space.

> > > > > In this case it's EPROBE_DEFER.

> > > > >

> > > > > Wrap it to return -ENODEV instead as sysfs does.

> > >

> > > > > Fixes: d7c51b47ac11 ("gpio: userspace ABI for reading/writing GPIO lines")

> > > > > Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events")

> > > > > Fixes: 3c0d9c635ae2 ("gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL")

> > >

> > > ...

> > >

> > > > You immediately revert this patch in patch 2.

> > > > My understanding is that is not allowed within a patch set.

> > >

> > > > Why split the patches instead of going direct to the new helper?

> > >

> > > It's for backporting to make it easier. (I deliberately left the context above)

> > >

> > > I can fold them if maintainers think it's okay to do.

> > >

> >

> > Not sure what the constraints are on backporting, but wouldn't it be

> > simpler and cleaner to backport the new helper?

>

> Logically (and ideally) it would be three different patches:

>  1) introduce helper

>  2) use helper

>  3) fix places where it's needed to be done

>

> But the above scheme doesn't fit backporting idea (we don't backport new

> features and APIs without really necessity). So, the options left are:

>

> Option a: One patch (feels a bit like above)

> Option b: Two patches like in this series (yes, you are correct about

>           disadvantages)

>

> > But, as you say, it is the maintainers' call.

>

> --

> With Best Regards,

> Andy Shevchenko

>

>


Third option is to backport this patch but apply the helper
immediately to master.

Bart
Andy Shevchenko May 20, 2021, 1:14 p.m. | #4
On Thu, May 20, 2021 at 4:08 PM Bartosz Golaszewski
<bgolaszewski@baylibre.com> wrote:
> On Wed, May 19, 2021 at 10:30 AM Andy Shevchenko

> <andriy.shevchenko@linux.intel.com> wrote:

> > On Wed, May 19, 2021 at 04:04:34PM +0800, Kent Gibson wrote:

> > > On Wed, May 19, 2021 at 10:45:16AM +0300, Andy Shevchenko wrote:

> > > > On Wed, May 19, 2021 at 07:24:51AM +0800, Kent Gibson wrote:

> > > > > On Tue, May 18, 2021 at 06:50:12PM +0300, Andy Shevchenko wrote:


...

> > > > > > Fixes: d7c51b47ac11 ("gpio: userspace ABI for reading/writing GPIO lines")

> > > > > > Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events")

> > > > > > Fixes: 3c0d9c635ae2 ("gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL")


...

> > > > > You immediately revert this patch in patch 2.

> > > > > My understanding is that is not allowed within a patch set.

> > > >

> > > > > Why split the patches instead of going direct to the new helper?

> > > >

> > > > It's for backporting to make it easier. (I deliberately left the context above)

> > > >

> > > > I can fold them if maintainers think it's okay to do.

> > > >

> > >

> > > Not sure what the constraints are on backporting, but wouldn't it be

> > > simpler and cleaner to backport the new helper?

> >

> > Logically (and ideally) it would be three different patches:

> >  1) introduce helper

> >  2) use helper

> >  3) fix places where it's needed to be done

> >

> > But the above scheme doesn't fit backporting idea (we don't backport new

> > features and APIs without really necessity). So, the options left are:

> >

> > Option a: One patch (feels a bit like above)

> > Option b: Two patches like in this series (yes, you are correct about

> >           disadvantages)

> >

> > > But, as you say, it is the maintainers' call.


> Third option is to backport this patch but apply the helper

> immediately to master.


If I got you correctly, you want to have two patches, one for
backporting and one for current, correct? But how can we backport
something which has never been upstreamed?

-- 
With Best Regards,
Andy Shevchenko
Bartosz Golaszewski May 20, 2021, 2:39 p.m. | #5
On Thu, May 20, 2021 at 3:15 PM Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
>

> On Thu, May 20, 2021 at 4:08 PM Bartosz Golaszewski

> <bgolaszewski@baylibre.com> wrote:

> > On Wed, May 19, 2021 at 10:30 AM Andy Shevchenko

> > <andriy.shevchenko@linux.intel.com> wrote:

> > > On Wed, May 19, 2021 at 04:04:34PM +0800, Kent Gibson wrote:

> > > > On Wed, May 19, 2021 at 10:45:16AM +0300, Andy Shevchenko wrote:

> > > > > On Wed, May 19, 2021 at 07:24:51AM +0800, Kent Gibson wrote:

> > > > > > On Tue, May 18, 2021 at 06:50:12PM +0300, Andy Shevchenko wrote:

>

> ...

>

> > > > > > > Fixes: d7c51b47ac11 ("gpio: userspace ABI for reading/writing GPIO lines")

> > > > > > > Fixes: 61f922db7221 ("gpio: userspace ABI for reading GPIO line events")

> > > > > > > Fixes: 3c0d9c635ae2 ("gpiolib: cdev: support GPIO_V2_GET_LINE_IOCTL and GPIO_V2_LINE_GET_VALUES_IOCTL")

>

> ...

>

> > > > > > You immediately revert this patch in patch 2.

> > > > > > My understanding is that is not allowed within a patch set.

> > > > >

> > > > > > Why split the patches instead of going direct to the new helper?

> > > > >

> > > > > It's for backporting to make it easier. (I deliberately left the context above)

> > > > >

> > > > > I can fold them if maintainers think it's okay to do.

> > > > >

> > > >

> > > > Not sure what the constraints are on backporting, but wouldn't it be

> > > > simpler and cleaner to backport the new helper?

> > >

> > > Logically (and ideally) it would be three different patches:

> > >  1) introduce helper

> > >  2) use helper

> > >  3) fix places where it's needed to be done

> > >

> > > But the above scheme doesn't fit backporting idea (we don't backport new

> > > features and APIs without really necessity). So, the options left are:

> > >

> > > Option a: One patch (feels a bit like above)

> > > Option b: Two patches like in this series (yes, you are correct about

> > >           disadvantages)

> > >

> > > > But, as you say, it is the maintainers' call.

>

> > Third option is to backport this patch but apply the helper

> > immediately to master.

>

> If I got you correctly, you want to have two patches, one for

> backporting and one for current, correct? But how can we backport

> something which has never been upstreamed?

>


Well we would not technically backport anything - there would be one
patch for mainline and a separate fix for stable.

Bart

Patch

diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c
index 1631727bf0da..1d8f66880d63 100644
--- a/drivers/gpio/gpiolib-cdev.c
+++ b/drivers/gpio/gpiolib-cdev.c
@@ -331,8 +331,11 @@  static int linehandle_create(struct gpio_device *gdev, void __user *ip)
 		}
 
 		ret = gpiod_request(desc, lh->label);
-		if (ret)
+		if (ret) {
+			if (ret == -EPROBE_DEFER)
+				ret = -ENODEV;
 			goto out_free_lh;
+		}
 		lh->descs[i] = desc;
 		linehandle_flags_to_desc_flags(handlereq.flags, &desc->flags);
 
@@ -1379,8 +1382,11 @@  static int linereq_create(struct gpio_device *gdev, void __user *ip)
 		}
 
 		ret = gpiod_request(desc, lr->label);
-		if (ret)
+		if (ret) {
+			if (ret == -EPROBE_DEFER)
+				ret = -ENODEV;
 			goto out_free_linereq;
+		}
 
 		lr->lines[i].desc = desc;
 		flags = gpio_v2_line_config_flags(lc, i);
@@ -1765,8 +1771,11 @@  static int lineevent_create(struct gpio_device *gdev, void __user *ip)
 	}
 
 	ret = gpiod_request(desc, le->label);
-	if (ret)
+	if (ret) {
+		if (ret == -EPROBE_DEFER)
+			ret = -ENODEV;
 		goto out_free_le;
+	}
 	le->desc = desc;
 	le->eflags = eflags;