mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-03-09 15:40:20 +00:00
57 lines
2 KiB
Diff
57 lines
2 KiB
Diff
From f92b55d534dcf9e740352b9c6c98f01f38aaa5e8 Mon Sep 17 00:00:00 2001
|
|
From: Hermes Zhang <chenhuiz@axis.com>
|
|
Date: Tue, 28 Aug 2018 09:48:30 +0800
|
|
Subject: [PATCH 458/496] Bluetooth: hci_ldisc: Free rw_semaphore on close
|
|
|
|
commit e6a57d22f787e73635ce0d29eef0abb77928b3e9 upstream.
|
|
|
|
The percpu_rw_semaphore is not currently freed, and this leads to
|
|
a crash when the stale rcu callback is invoked. DEBUG_OBJECTS
|
|
detects this.
|
|
|
|
ODEBUG: free active (active state 1) object type: rcu_head hint: (null)
|
|
------------[ cut here ]------------
|
|
WARNING: CPU: 1 PID: 2024 at debug_print_object+0xac/0xc8
|
|
PC is at debug_print_object+0xac/0xc8
|
|
LR is at debug_print_object+0xac/0xc8
|
|
Call trace:
|
|
[<ffffff80082e2c2c>] debug_print_object+0xac/0xc8
|
|
[<ffffff80082e40b0>] debug_check_no_obj_freed+0x1e8/0x228
|
|
[<ffffff8008191254>] kfree+0x1cc/0x250
|
|
[<ffffff80083cc03c>] hci_uart_tty_close+0x54/0x108
|
|
[<ffffff800832e118>] tty_ldisc_close.isra.1+0x40/0x58
|
|
[<ffffff800832e14c>] tty_ldisc_kill+0x1c/0x40
|
|
[<ffffff800832e3dc>] tty_ldisc_release+0x94/0x170
|
|
[<ffffff8008325554>] tty_release_struct+0x1c/0x58
|
|
[<ffffff8008326400>] tty_release+0x3b0/0x490
|
|
[<ffffff80081a3fe8>] __fput+0x88/0x1d0
|
|
[<ffffff80081a418c>] ____fput+0xc/0x18
|
|
[<ffffff80080c0624>] task_work_run+0x9c/0xc0
|
|
[<ffffff80080a9e24>] do_exit+0x24c/0x8a0
|
|
[<ffffff80080aa4e0>] do_group_exit+0x38/0xa0
|
|
[<ffffff80080aa558>] __wake_up_parent+0x0/0x28
|
|
[<ffffff8008082c00>] el0_svc_naked+0x34/0x38
|
|
---[ end trace bfe08cbd89098cdf ]---
|
|
|
|
Signed-off-by: Hermes Zhang <chenhuiz@axis.com>
|
|
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
|
---
|
|
drivers/bluetooth/hci_ldisc.c | 2 ++
|
|
1 file changed, 2 insertions(+)
|
|
|
|
diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c
|
|
index c823914b3a80..30bbe19b4b85 100644
|
|
--- a/drivers/bluetooth/hci_ldisc.c
|
|
+++ b/drivers/bluetooth/hci_ldisc.c
|
|
@@ -539,6 +539,8 @@ static void hci_uart_tty_close(struct tty_struct *tty)
|
|
}
|
|
clear_bit(HCI_UART_PROTO_SET, &hu->flags);
|
|
|
|
+ percpu_free_rwsem(&hu->proto_lock);
|
|
+
|
|
kfree(hu);
|
|
}
|
|
|
|
--
|
|
2.19.1
|
|
|