linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] leds: trigger: netdev: Fix kernel panic on interface rename trig notify
@ 2024-02-03 23:54 Christian Marangi
  2024-02-04 15:15 ` Andrew Lunn
  2024-02-08 14:04 ` (subset) " Lee Jones
  0 siblings, 2 replies; 11+ messages in thread
From: Christian Marangi @ 2024-02-03 23:54 UTC (permalink / raw)
  To: Pavel Machek, Lee Jones, Andrew Lunn, Christian Marangi,
	David S. Miller, Jakub Kicinski, Heiner Kallweit, Daniel Golle,
	Li Zetao, linux-leds, linux-kernel
  Cc: stable

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 <ansuelsmth@gmail.com>
---
 drivers/leds/trigger/ledtrig-netdev.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/leds/trigger/ledtrig-netdev.c b/drivers/leds/trigger/ledtrig-netdev.c
index 8e5475819590..df1b1d8468e6 100644
--- a/drivers/leds/trigger/ledtrig-netdev.c
+++ b/drivers/leds/trigger/ledtrig-netdev.c
@@ -504,12 +504,12 @@ static int netdev_trig_notify(struct notifier_block *nb,
 	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);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-02-08 14:12 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-02-03 23:54 [PATCH] leds: trigger: netdev: Fix kernel panic on interface rename trig notify Christian Marangi
2024-02-04 15:15 ` Andrew Lunn
2024-02-05  8:50   ` Lee Jones
2024-02-05 13:41     ` Andrew Lunn
2024-02-05 13:53       ` Christian Marangi
2024-02-05 14:33         ` Lee Jones
2024-02-05 14:38           ` Christian Marangi
2024-02-05 15:04             ` Lee Jones
2024-02-08 14:12               ` Lee Jones
2024-02-05 14:27       ` Lee Jones
2024-02-08 14:04 ` (subset) " Lee Jones

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).