* Re: Patch "gpio: cdev: sanitize the label before requesting the interrupt" has been added to the 6.1-sta [not found] <2024040339-anatomy-multitude-01a8 () gregkh> @ 2024-04-04 1:20 ` Pascal Ernster 2024-04-04 6:42 ` Greg Kroah-Hartman 0 siblings, 1 reply; 2+ messages in thread From: Pascal Ernster @ 2024-04-04 1:20 UTC (permalink / raw) To: stable, Greg Kroah-Hartman; +Cc: Sasha Levin [2024-04-03 19:58] gregkh linuxfoundation ! org: > This is a note to let you know that I've just added the patch titled > > gpio: cdev: sanitize the label before requesting the interrupt > > to the 6.1-stable tree which can be found at: > http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary > > The filename of the patch is: > gpio-cdev-sanitize-the-label-before-requesting-the-interrupt.patch > and it can be found in the queue-6.1 subdirectory. > > If you, or anyone else, feels it should not be added to the stable tree, > please let <stable@vger.kernel.org> know about it. > > > From b34490879baa847d16fc529c8ea6e6d34f004b38 Mon Sep 17 00:00:00 2001 > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > Date: Mon, 25 Mar 2024 10:02:42 +0100 > Subject: gpio: cdev: sanitize the label before requesting the interrupt > > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > commit b34490879baa847d16fc529c8ea6e6d34f004b38 upstream. > > When an interrupt is requested, a procfs directory is created under > "/proc/irq/<irqnum>/<label>" where <label> is the string passed to one of > the request_irq() variants. > > What follows is that the string must not contain the "/" character or > the procfs mkdir operation will fail. We don't have such constraints for > GPIO consumer labels which are used verbatim as interrupt labels for > GPIO irqs. We must therefore sanitize the consumer string before > requesting the interrupt. > > Let's replace all "/" with ":". > > Cc: stable@vger.kernel.org > Reported-by: Stefan Wahren <wahrenst@gmx.net> > Closes: https://lore.kernel.org/linux-gpio/39fe95cb-aa83-4b8b-8cab-63947a726754@gmx.net/ > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > Reviewed-by: Kent Gibson <warthog618@gmail.com> > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > --- > drivers/gpio/gpiolib-cdev.c | 38 ++++++++++++++++++++++++++++++++------ > 1 file changed, 32 insertions(+), 6 deletions(-) > > --- a/drivers/gpio/gpiolib-cdev.c > +++ b/drivers/gpio/gpiolib-cdev.c > @@ -999,10 +999,20 @@ static u32 gpio_v2_line_config_debounce_ > return 0; > } > > +static inline char *make_irq_label(const char *orig) > +{ > + return kstrdup_and_replace(orig, '/', ':', GFP_KERNEL); > +} > + > +static inline void free_irq_label(const char *label) > +{ > + kfree(label); > +} > + > static void edge_detector_stop(struct line *line) > { > if (line->irq) { > - free_irq(line->irq, line); > + free_irq_label(free_irq(line->irq, line)); > line->irq = 0; > } > > @@ -1027,6 +1037,7 @@ static int edge_detector_setup(struct li > unsigned long irqflags = 0; > u64 eflags; > int irq, ret; > + char *label; > > eflags = edflags & GPIO_V2_LINE_EDGE_FLAGS; > if (eflags && !kfifo_initialized(&line->req->events)) { > @@ -1063,11 +1074,17 @@ static int edge_detector_setup(struct li > IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING; > irqflags |= IRQF_ONESHOT; > > + label = make_irq_label(line->req->label); > + if (!label) > + return -ENOMEM; > + > /* Request a thread to read the events */ > ret = request_threaded_irq(irq, edge_irq_handler, edge_irq_thread, > - irqflags, line->req->label, line); > - if (ret) > + irqflags, label, line); > + if (ret) { > + free_irq_label(label); > return ret; > + } > > line->irq = irq; > return 0; > @@ -1910,7 +1927,7 @@ static ssize_t lineevent_read(struct fil > static void lineevent_free(struct lineevent_state *le) > { > if (le->irq) > - free_irq(le->irq, le); > + free_irq_label(free_irq(le->irq, le)); > if (le->desc) > gpiod_free(le->desc); > kfree(le->label); > @@ -2058,6 +2075,7 @@ static int lineevent_create(struct gpio_ > int fd; > int ret; > int irq, irqflags = 0; > + char *label; > > if (copy_from_user(&eventreq, ip, sizeof(eventreq))) > return -EFAULT; > @@ -2138,15 +2156,23 @@ static int lineevent_create(struct gpio_ > INIT_KFIFO(le->events); > init_waitqueue_head(&le->wait); > > + label = make_irq_label(le->label); > + if (!label) { > + ret = -ENOMEM; > + goto out_free_le; > + } > + > /* Request a thread to read the events */ > ret = request_threaded_irq(irq, > lineevent_irq_handler, > lineevent_irq_thread, > irqflags, > - le->label, > + label, > le); > - if (ret) > + if (ret) { > + free_irq_label(label); > goto out_free_le; > + } > > le->irq = irq; > > > > Patches currently in stable-queue which might be from bartosz.golaszewski@linaro.org are > > queue-6.1/gpio-cdev-sanitize-the-label-before-requesting-the-interrupt.patch Hi, this breaks the build because kstrdup_and_replace() does not exist in version branch 6.1. Regards Pascal ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Patch "gpio: cdev: sanitize the label before requesting the interrupt" has been added to the 6.1-sta 2024-04-04 1:20 ` Patch "gpio: cdev: sanitize the label before requesting the interrupt" has been added to the 6.1-sta Pascal Ernster @ 2024-04-04 6:42 ` Greg Kroah-Hartman 0 siblings, 0 replies; 2+ messages in thread From: Greg Kroah-Hartman @ 2024-04-04 6:42 UTC (permalink / raw) To: Pascal Ernster; +Cc: stable, Sasha Levin On Thu, Apr 04, 2024 at 03:20:05AM +0200, Pascal Ernster wrote: > [2024-04-03 19:58] gregkh linuxfoundation ! org: > > This is a note to let you know that I've just added the patch titled > > > > gpio: cdev: sanitize the label before requesting the interrupt > > > > to the 6.1-stable tree which can be found at: > > http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary > > > > The filename of the patch is: > > gpio-cdev-sanitize-the-label-before-requesting-the-interrupt.patch > > and it can be found in the queue-6.1 subdirectory. > > > > If you, or anyone else, feels it should not be added to the stable tree, > > please let <stable@vger.kernel.org> know about it. > > > > > > From b34490879baa847d16fc529c8ea6e6d34f004b38 Mon Sep 17 00:00:00 2001 > > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > Date: Mon, 25 Mar 2024 10:02:42 +0100 > > Subject: gpio: cdev: sanitize the label before requesting the interrupt > > > > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > > > commit b34490879baa847d16fc529c8ea6e6d34f004b38 upstream. > > > > When an interrupt is requested, a procfs directory is created under > > "/proc/irq/<irqnum>/<label>" where <label> is the string passed to one of > > the request_irq() variants. > > > > What follows is that the string must not contain the "/" character or > > the procfs mkdir operation will fail. We don't have such constraints for > > GPIO consumer labels which are used verbatim as interrupt labels for > > GPIO irqs. We must therefore sanitize the consumer string before > > requesting the interrupt. > > > > Let's replace all "/" with ":". > > > > Cc: stable@vger.kernel.org > > Reported-by: Stefan Wahren <wahrenst@gmx.net> > > Closes: https://lore.kernel.org/linux-gpio/39fe95cb-aa83-4b8b-8cab-63947a726754@gmx.net/ > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > Reviewed-by: Kent Gibson <warthog618@gmail.com> > > Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> > > --- > > drivers/gpio/gpiolib-cdev.c | 38 ++++++++++++++++++++++++++++++++------ > > 1 file changed, 32 insertions(+), 6 deletions(-) > > > > --- a/drivers/gpio/gpiolib-cdev.c > > +++ b/drivers/gpio/gpiolib-cdev.c > > @@ -999,10 +999,20 @@ static u32 gpio_v2_line_config_debounce_ > > return 0; > > } > > +static inline char *make_irq_label(const char *orig) > > +{ > > + return kstrdup_and_replace(orig, '/', ':', GFP_KERNEL); > > +} > > + > > +static inline void free_irq_label(const char *label) > > +{ > > + kfree(label); > > +} > > + > > static void edge_detector_stop(struct line *line) > > { > > if (line->irq) { > > - free_irq(line->irq, line); > > + free_irq_label(free_irq(line->irq, line)); > > line->irq = 0; > > } > > @@ -1027,6 +1037,7 @@ static int edge_detector_setup(struct li > > unsigned long irqflags = 0; > > u64 eflags; > > int irq, ret; > > + char *label; > > eflags = edflags & GPIO_V2_LINE_EDGE_FLAGS; > > if (eflags && !kfifo_initialized(&line->req->events)) { > > @@ -1063,11 +1074,17 @@ static int edge_detector_setup(struct li > > IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING; > > irqflags |= IRQF_ONESHOT; > > + label = make_irq_label(line->req->label); > > + if (!label) > > + return -ENOMEM; > > + > > /* Request a thread to read the events */ > > ret = request_threaded_irq(irq, edge_irq_handler, edge_irq_thread, > > - irqflags, line->req->label, line); > > - if (ret) > > + irqflags, label, line); > > + if (ret) { > > + free_irq_label(label); > > return ret; > > + } > > line->irq = irq; > > return 0; > > @@ -1910,7 +1927,7 @@ static ssize_t lineevent_read(struct fil > > static void lineevent_free(struct lineevent_state *le) > > { > > if (le->irq) > > - free_irq(le->irq, le); > > + free_irq_label(free_irq(le->irq, le)); > > if (le->desc) > > gpiod_free(le->desc); > > kfree(le->label); > > @@ -2058,6 +2075,7 @@ static int lineevent_create(struct gpio_ > > int fd; > > int ret; > > int irq, irqflags = 0; > > + char *label; > > if (copy_from_user(&eventreq, ip, sizeof(eventreq))) > > return -EFAULT; > > @@ -2138,15 +2156,23 @@ static int lineevent_create(struct gpio_ > > INIT_KFIFO(le->events); > > init_waitqueue_head(&le->wait); > > + label = make_irq_label(le->label); > > + if (!label) { > > + ret = -ENOMEM; > > + goto out_free_le; > > + } > > + > > /* Request a thread to read the events */ > > ret = request_threaded_irq(irq, > > lineevent_irq_handler, > > lineevent_irq_thread, > > irqflags, > > - le->label, > > + label, > > le); > > - if (ret) > > + if (ret) { > > + free_irq_label(label); > > goto out_free_le; > > + } > > le->irq = irq; > > > > > > Patches currently in stable-queue which might be from bartosz.golaszewski@linaro.org are > > > > queue-6.1/gpio-cdev-sanitize-the-label-before-requesting-the-interrupt.patch > > > Hi, > > > this breaks the build because kstrdup_and_replace() does not exist in > version branch 6.1. Yes, my fault, I committed it and then walked away from the computer as it was a long day. I'll go fix it up now, thanks greg k-h ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-04-04 6:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <2024040339-anatomy-multitude-01a8 () gregkh>
2024-04-04 1:20 ` Patch "gpio: cdev: sanitize the label before requesting the interrupt" has been added to the 6.1-sta Pascal Ernster
2024-04-04 6:42 ` Greg Kroah-Hartman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox