Patch "Bluetooth: Fix not cleanup led when bt_init fails" has been added to the 5.4-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

    Bluetooth: Fix not cleanup led when bt_init fails

to the 5.4-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:
     bluetooth-fix-not-cleanup-led-when-bt_init-fails.patch
and it can be found in the queue-5.4 subdirectory.

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



commit 3b5a4ce106ce67f3016beabc2aef3b0230bc6dab
Author: Chen Zhongjin <chenzhongjin@xxxxxxxxxx>
Date:   Tue Nov 29 17:25:56 2022 +0800

    Bluetooth: Fix not cleanup led when bt_init fails
    
    [ Upstream commit 2f3957c7eb4e07df944169a3e50a4d6790e1c744 ]
    
    bt_init() calls bt_leds_init() to register led, but if it fails later,
    bt_leds_cleanup() is not called to unregister it.
    
    This can cause panic if the argument "bluetooth-power" in text is freed
    and then another led_trigger_register() tries to access it:
    
    BUG: unable to handle page fault for address: ffffffffc06d3bc0
    RIP: 0010:strcmp+0xc/0x30
      Call Trace:
        <TASK>
        led_trigger_register+0x10d/0x4f0
        led_trigger_register_simple+0x7d/0x100
        bt_init+0x39/0xf7 [bluetooth]
        do_one_initcall+0xd0/0x4e0
    
    Fixes: e64c97b53bc6 ("Bluetooth: Add combined LED trigger for controller power")
    Signed-off-by: Chen Zhongjin <chenzhongjin@xxxxxxxxxx>
    Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
index 5f508c50649d..8031526eeeee 100644
--- a/net/bluetooth/af_bluetooth.c
+++ b/net/bluetooth/af_bluetooth.c
@@ -735,7 +735,7 @@ static int __init bt_init(void)
 
 	err = bt_sysfs_init();
 	if (err < 0)
-		return err;
+		goto cleanup_led;
 
 	err = sock_register(&bt_sock_family_ops);
 	if (err)
@@ -771,6 +771,8 @@ static int __init bt_init(void)
 	sock_unregister(PF_BLUETOOTH);
 cleanup_sysfs:
 	bt_sysfs_cleanup();
+cleanup_led:
+	bt_leds_cleanup();
 	return err;
 }
 



[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