Patch "leds: trigger: netdev: Fix kernel panic on interface rename trig notify" has been added to the 6.8-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    leds: trigger: netdev: Fix kernel panic on interface rename trig notify

to the 6.8-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:
     leds-trigger-netdev-fix-kernel-panic-on-interface-re.patch
and it can be found in the queue-6.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit dfcf1c2f09918b85fc695e62dbf4f7318af2213b
Author: Christian Marangi <ansuelsmth@xxxxxxxxx>
Date:   Sun Feb 4 00:54:01 2024 +0100

    leds: trigger: netdev: Fix kernel panic on interface rename trig notify
    
    [ Upstream commit 415798bc07dd1c1ae3a656aa026580816e0b9fe8 ]
    
    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@xxxxxxxxxxxxxxx
    Signed-off-by: Christian Marangi <ansuelsmth@xxxxxxxxx>
    Reviewed-by: Andrew Lunn <andrew@xxxxxxx>
    Link: https://lore.kernel.org/r/20240203235413.1146-1-ansuelsmth@xxxxxxxxx
    Signed-off-by: Lee Jones <lee@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/leds/trigger/ledtrig-netdev.c b/drivers/leds/trigger/ledtrig-netdev.c
index 8e5475819590e..df1b1d8468e60 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);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux