mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 07:03:28 -04:00
r8169: keep LED device name valid after setup
rtl8168_setup_ldev() and rtl8125_setup_led_ldev() build the LED device name in a stack buffer and assign it to led_cdev->name. The LED class device registration path reads led_cdev->name after it has been assigned, and struct led_classdev stores the name as part of the LED class device state. Do not keep a pointer to a setup function's stack buffer there. Store the name in struct r8169_led_classdev instead, so it remains valid for the lifetime of the LED class device. Signed-off-by: Zhixing Chen <running910@gmail.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://patch.msgid.link/20260813100711.14724-1-running910@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
936c0870c4
commit
3f33a2d2ea
@@ -31,6 +31,7 @@ struct r8169_led_classdev {
|
||||
struct led_classdev led;
|
||||
struct net_device *ndev;
|
||||
int index;
|
||||
char name[LED_MAX_NAME_SIZE];
|
||||
};
|
||||
|
||||
#define lcdev_to_r8169_ldev(lcdev) container_of(lcdev, struct r8169_led_classdev, led)
|
||||
@@ -131,13 +132,12 @@ static void rtl8168_setup_ldev(struct r8169_led_classdev *ldev,
|
||||
{
|
||||
struct rtl8169_private *tp = netdev_priv(ndev);
|
||||
struct led_classdev *led_cdev = &ldev->led;
|
||||
char led_name[LED_MAX_NAME_SIZE];
|
||||
|
||||
ldev->ndev = ndev;
|
||||
ldev->index = index;
|
||||
|
||||
r8169_get_led_name(tp, index, led_name, LED_MAX_NAME_SIZE);
|
||||
led_cdev->name = led_name;
|
||||
r8169_get_led_name(tp, index, ldev->name, sizeof(ldev->name));
|
||||
led_cdev->name = ldev->name;
|
||||
led_cdev->hw_control_trigger = "netdev";
|
||||
led_cdev->flags |= LED_RETAIN_AT_SHUTDOWN;
|
||||
led_cdev->hw_control_is_supported = rtl8168_led_hw_control_is_supported;
|
||||
@@ -230,13 +230,12 @@ static void rtl8125_setup_led_ldev(struct r8169_led_classdev *ldev,
|
||||
{
|
||||
struct rtl8169_private *tp = netdev_priv(ndev);
|
||||
struct led_classdev *led_cdev = &ldev->led;
|
||||
char led_name[LED_MAX_NAME_SIZE];
|
||||
|
||||
ldev->ndev = ndev;
|
||||
ldev->index = index;
|
||||
|
||||
r8169_get_led_name(tp, index, led_name, LED_MAX_NAME_SIZE);
|
||||
led_cdev->name = led_name;
|
||||
r8169_get_led_name(tp, index, ldev->name, sizeof(ldev->name));
|
||||
led_cdev->name = ldev->name;
|
||||
led_cdev->hw_control_trigger = "netdev";
|
||||
led_cdev->flags |= LED_RETAIN_AT_SHUTDOWN;
|
||||
led_cdev->hw_control_is_supported = rtl8125_led_hw_control_is_supported;
|
||||
|
||||
Reference in New Issue
Block a user