From: Christian Marangi Date: Sun, 11 Feb 2024 15:37:18 +0000 (+0100) Subject: generic: 6.1: move LEDs netdev trigger patch from pending to backport X-Git-Url: http://git.openwrt.org/ubox.git?a=commitdiff_plain;h=2253645411d98621466e4ba5e92595aeff3b413d;p=openwrt%2Fstaging%2Frobimarko.git generic: 6.1: move LEDs netdev trigger patch from pending to backport Move LEDs netdev trigger patch from pending to backport as it has been merged upstream. Signed-off-by: Christian Marangi --- diff --git a/target/linux/generic/backport-6.1/838-v6.9-leds-trigger-netdev-Fix-kernel-panic-on-interface-re.patch b/target/linux/generic/backport-6.1/838-v6.9-leds-trigger-netdev-Fix-kernel-panic-on-interface-re.patch new file mode 100644 index 0000000000..8d391678ff --- /dev/null +++ b/target/linux/generic/backport-6.1/838-v6.9-leds-trigger-netdev-Fix-kernel-panic-on-interface-re.patch @@ -0,0 +1,55 @@ +From 12ce20e02e532f101b725d71c52a36c5cc8ad1e6 Mon Sep 17 00:00:00 2001 +From: Christian Marangi +Date: Sun, 4 Feb 2024 00:54:01 +0100 +Subject: [PATCH] leds: trigger: netdev: Fix kernel panic on interface rename + trig notify + +Commit d5e01266e7f5 ("leds: trigger: netdev: add additional specific link +speed mode") in the various changes, reworked the way to set the LINKUP +mode in commit cee4bd16c319 ("leds: trigger: netdev: Recheck +NETDEV_LED_MODE_LINKUP on dev rename") and moved it to a generic function. + +This changed the logic where, in the previous implementation the dev +from the trigger event was used to check if the carrier was ok, but in +the new implementation with the generic function, the dev in +trigger_data is used instead. + +This is problematic and cause a possible kernel panic due to the fact +that the dev in the trigger_data still reference the old one as the +new one (passed from the trigger event) still has to be hold and saved +in the trigger_data struct (done in the NETDEV_REGISTER case). + +On calling of get_device_state(), an invalid net_dev is used and this +cause a kernel panic. + +To handle this correctly, move the call to get_device_state() after the +new net_dev is correctly set in trigger_data (in the NETDEV_REGISTER +case) and correctly parse the new dev. + +Fixes: d5e01266e7f5 ("leds: trigger: netdev: add additional specific link speed mode") +Cc: stable@vger.kernel.org +Signed-off-by: Christian Marangi +Reviewed-by: Andrew Lunn +Link: https://lore.kernel.org/r/20240203235413.1146-1-ansuelsmth@gmail.com +Signed-off-by: Lee Jones +--- + drivers/leds/trigger/ledtrig-netdev.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/leds/trigger/ledtrig-netdev.c ++++ b/drivers/leds/trigger/ledtrig-netdev.c +@@ -489,12 +489,12 @@ static int netdev_trig_notify(struct not + trigger_data->duplex = DUPLEX_UNKNOWN; + switch (evt) { + case NETDEV_CHANGENAME: +- get_device_state(trigger_data); +- fallthrough; + case NETDEV_REGISTER: + dev_put(trigger_data->net_dev); + dev_hold(dev); + trigger_data->net_dev = dev; ++ if (evt == NETDEV_CHANGENAME) ++ get_device_state(trigger_data); + break; + case NETDEV_UNREGISTER: + dev_put(trigger_data->net_dev); diff --git a/target/linux/generic/pending-6.1/830-leds-trigger-netdev-Fix-kernel-panic-on-interface-re.patch b/target/linux/generic/pending-6.1/830-leds-trigger-netdev-Fix-kernel-panic-on-interface-re.patch deleted file mode 100644 index 8006bdb2b4..0000000000 --- a/target/linux/generic/pending-6.1/830-leds-trigger-netdev-Fix-kernel-panic-on-interface-re.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 9e2a0a8bd7a392b5af6bf2cfa0b07d96d1fb6719 Mon Sep 17 00:00:00 2001 -From: Christian Marangi -Date: Sun, 4 Feb 2024 00:32:04 +0100 -Subject: [PATCH] leds: trigger: netdev: Fix kernel panic on interface rename - trig notify - -Commit d5e01266e7f5 ("leds: trigger: netdev: add additional specific link -speed mode") in the various changes, reworked the way to set the LINKUP -mode in commit cee4bd16c319 ("leds: trigger: netdev: Recheck -NETDEV_LED_MODE_LINKUP on dev rename") and moved it to a generic function. - -This changed the logic where, in the previous implementation the dev -from the trigger event was used to check if the carrier was ok, but in -the new implementation with the generic function, the dev in -trigger_data is used instead. - -This is problematic and cause a possible kernel panic due to the fact -that the dev in the trigger_data still reference the old one as the -new one (passed from the trigger event) still has to be hold and saved -in the trigger_data struct (done in the NETDEV_REGISTER case). - -On calling of get_device_state(), an invalid net_dev is used and this -cause a kernel panic. - -To handle this correctly, move the call to get_device_state() after the -new net_dev is correctly set in trigger_data (in the NETDEV_REGISTER -case) and correctly parse the new dev. - -Fixes: d5e01266e7f5 ("leds: trigger: netdev: add additional specific link speed mode") -Cc: stable@vger.kernel.org -Signed-off-by: Christian Marangi ---- - drivers/leds/trigger/ledtrig-netdev.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/drivers/leds/trigger/ledtrig-netdev.c -+++ b/drivers/leds/trigger/ledtrig-netdev.c -@@ -489,12 +489,12 @@ static int netdev_trig_notify(struct not - trigger_data->duplex = DUPLEX_UNKNOWN; - switch (evt) { - case NETDEV_CHANGENAME: -- get_device_state(trigger_data); -- fallthrough; - case NETDEV_REGISTER: - dev_put(trigger_data->net_dev); - dev_hold(dev); - trigger_data->net_dev = dev; -+ if (evt == NETDEV_CHANGENAME) -+ get_device_state(trigger_data); - break; - case NETDEV_UNREGISTER: - dev_put(trigger_data->net_dev);