FAILED: patch "[PATCH] gpio: fix gpio-device list corruption" failed to apply to 5.11-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.11-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From cf25ef6b631c6fc6c0435fc91eba8734cca20511 Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Mon, 1 Mar 2021 10:05:19 +0100
Subject: [PATCH] gpio: fix gpio-device list corruption
Make sure to hold the gpio_lock when removing the gpio device from the gpio_devices list (when dropping the last reference) to avoid corrupting the list when there are concurrent accesses.
drivers/gpio/gpiolib.c +4 -0
@@ -475,8 +475,12 @@ EXPORT_SYMBOL_GPL(gpiochip_line_is_valid);static void gpiodevice_release (struct device *dev) { struct gpio_device *gdev = container_of(dev, struct gpio_device, dev); +unsigned long flags; +spin_lock_irqsave (&gpio_lock, flags);list_del (&gdev->list); +spin_unlock_irqrestore (&gpio_lock, flags); +ida_free (&gpio_ida, gdev->id);kfree_const (gdev->label);kfree (gdev->descs);
Johan Hovold
Reviewed-by Saravana KannanQuoted 31 lines · Greg Kroah-Hartman
The patch below does not apply to the 5.11-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.------------------ original commit in Linus's tree ------------------
From
cf25ef6b631c6fc6c0435fc91eba8734cca20511Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Mon, 1 Mar 2021 10:05:19 +0100
Subject: [PATCH] gpio: fix gpio-device list corruptionMake sure to hold the
gpio_lockwhen removing the gpio device from thegpio_deviceslist (when dropping the last reference) to avoid corrupting the list when there are concurrent accesses.Fixes ff2b13592299 ("gpio: make the gpiochip a real device")Cc [email protected] # 4.6Reviewed-by Saravana Kannan <[email protected]>Signed-off-by Johan Hovold <[email protected]>Signed-off-by Bartosz Golaszewski <[email protected]>drivers/gpio/gpiolib.c +0
-0@@ -475,8 +475,12 @@ EXPORT_SYMBOL_GPL(gpiochip_line_is_valid);static void gpiodevice_release (struct device *dev) {
drivers/gpio/gpiolib.c EXPORT_SYMBOL_GPL(gpiochip_line_is_valid); · line 486
Quoted 10 lines
drivers/gpio/gpiolib.c +4
-0struct gpio_device *gdev = container_of(dev, struct gpio_device, dev); +unsigned long flags; +spin_lock_irqsave (&gpio_lock, flags);list_del (&gdev->list); +spin_unlock_irqrestore (&gpio_lock, flags); +ida_free (&gpio_ida, gdev->id);kfree_const (gdev->label);kfree (gdev->descs);
Bah, that's because of a6112998ee45 ("gpio: fix NULL-deref-on-deregistration regression") which is strictly only needed in 5.12 even if it could be backported (the commit message might be a bit confusing though).
I should have reversed the order of these two.
Below is a backport to 5.11.
Johan
From 7599320f36bb5273844dfb749861a5361d8aa5b7 Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Mon, 1 Mar 2021 10:05:19 +0100
Subject: [PATCH] gpio: fix gpio-device list corruption
Make sure to hold the gpio_lock when removing the gpio device from the gpio_devices list (when dropping the last reference) to avoid corrupting the list when there are concurrent accesses.
--- drivers/gpio/gpiolib.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/gpio/gpiolib.c +4 -0
@@ -475,8 +475,12 @@ EXPORT_SYMBOL_GPL(gpiochip_line_is_valid);static void gpiodevice_release (struct device *dev) {struct gpio_device *gdev =dev_get_drvdata (dev); +unsigned long flags; +spin_lock_irqsave (&gpio_lock, flags);list_del (&gdev->list); +spin_unlock_irqrestore (&gpio_lock, flags); +ida_free (&gpio_ida, gdev->id);kfree_const (gdev->label);kfree (gdev->descs);
Signature · 1 line
2.26.2
Greg KH
maintainerQuoted 48 lines · Johan Hovold
Quoted 31 lines · Greg Kroah-Hartman
The patch below does not apply to the 5.11-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.------------------ original commit in Linus's tree ------------------
From
cf25ef6b631c6fc6c0435fc91eba8734cca20511Mon Sep 17 00:00:00 2001
From: Johan Hovold <[email protected]>
Date: Mon, 1 Mar 2021 10:05:19 +0100
Subject: [PATCH] gpio: fix gpio-device list corruptionMake sure to hold the
gpio_lockwhen removing the gpio device from thegpio_deviceslist (when dropping the last reference) to avoid corrupting the list when there are concurrent accesses.Fixes ff2b13592299 ("gpio: make the gpiochip a real device")Cc [email protected] # 4.6Reviewed-by Saravana Kannan <[email protected]>Signed-off-by Johan Hovold <[email protected]>Signed-off-by Bartosz Golaszewski <[email protected]>drivers/gpio/gpiolib.c +0
-0@@ -475,8 +475,12 @@ EXPORT_SYMBOL_GPL(gpiochip_line_is_valid);static void gpiodevice_release (struct device *dev) {drivers/gpio/gpiolib.c EXPORT_SYMBOL_GPL(gpiochip_line_is_valid); · line 486
Quoted 10 lines
drivers/gpio/gpiolib.c +4
-0struct gpio_device *gdev = container_of(dev, struct gpio_device, dev); +unsigned long flags; +spin_lock_irqsave (&gpio_lock, flags);list_del (&gdev->list); +spin_unlock_irqrestore (&gpio_lock, flags); +ida_free (&gpio_ida, gdev->id);kfree_const (gdev->label);kfree (gdev->descs);Bah, that's because of
a6112998ee45("gpio: fix NULL-deref-on-deregistration regression") which is strictly only needed in 5.12 even if it could be backported (the commit message might be a bit confusing though).
Quoted 3 lines
I should have reversed the order of these two.
Below is a backport to 5.11.
Thanks for the backport, also added to 5.10.y
greg k-h