Commit 4d94f05
committed
Bluetooth: hci_core: Fix sleeping function called from invalid context
This reworks hci_cb_list to not use mutex hci_cb_list_lock to avoid bugs
like the bellow:
BUG: sleeping function called from invalid context at kernel/locking/mutex.c:585
in_atomic(): 0, irqs_disabled(): 0, non_block: 0, pid: 5070, name: kworker/u9:2
preempt_count: 0, expected: 0
RCU nest depth: 1, expected: 0
4 locks held by kworker/u9:2/5070:
#0: ffff888015be3948 ((wq_completion)hci0#2){+.+.}-{0:0}, at: process_one_work kernel/workqueue.c:3229 [inline]
#0: ffff888015be3948 ((wq_completion)hci0#2){+.+.}-{0:0}, at: process_scheduled_works+0x8e0/0x1770 kernel/workqueue.c:3335
#1: ffffc90003b6fd00 ((work_completion)(&hdev->rx_work)){+.+.}-{0:0}, at: process_one_work kernel/workqueue.c:3230 [inline]
#1: ffffc90003b6fd00 ((work_completion)(&hdev->rx_work)){+.+.}-{0:0}, at: process_scheduled_works+0x91b/0x1770 kernel/workqueue.c:3335
#2: ffff8880665d0078 (&hdev->lock){+.+.}-{3:3}, at: hci_le_create_big_complete_evt+0xcf/0xae0 net/bluetooth/hci_event.c:6914
#3: ffffffff8e132020 (rcu_read_lock){....}-{1:2}, at: rcu_lock_acquire include/linux/rcupdate.h:298 [inline]
#3: ffffffff8e132020 (rcu_read_lock){....}-{1:2}, at: rcu_read_lock include/linux/rcupdate.h:750 [inline]
#3: ffffffff8e132020 (rcu_read_lock){....}-{1:2}, at: hci_le_create_big_complete_evt+0xdb/0xae0 net/bluetooth/hci_event.c:6915
CPU: 0 PID: 5070 Comm: kworker/u9:2 Not tainted 6.8.0-syzkaller-08073-g480e035fc4c7 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
Workqueue: hci0 hci_rx_work
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x241/0x360 lib/dump_stack.c:114
__might_resched+0x5d4/0x780 kernel/sched/core.c:10187
__mutex_lock_common kernel/locking/mutex.c:585 [inline]
__mutex_lock+0xc1/0xd70 kernel/locking/mutex.c:752
hci_connect_cfm include/net/bluetooth/hci_core.h:2004 [inline]
hci_le_create_big_complete_evt+0x3d9/0xae0 net/bluetooth/hci_event.c:6939
hci_event_func net/bluetooth/hci_event.c:7514 [inline]
hci_event_packet+0xa53/0x1540 net/bluetooth/hci_event.c:7569
hci_rx_work+0x3e8/0xca0 net/bluetooth/hci_core.c:4171
process_one_work kernel/workqueue.c:3254 [inline]
process_scheduled_works+0xa00/0x1770 kernel/workqueue.c:3335
worker_thread+0x86d/0xd70 kernel/workqueue.c:3416
kthread+0x2f0/0x390 kernel/kthread.c:388
ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:243
</TASK>
Reported-by: [email protected]
Tested-by: [email protected]
Closes: https://syzkaller.appspot.com/bug?extid=2fb0835e0c9cefc34614
Signed-off-by: Luiz Augusto von Dentz <[email protected]>1 parent 3e643e4 commit 4d94f05
File tree
6 files changed
+97
-57
lines changed- include/net/bluetooth
- net/bluetooth
- rfcomm
6 files changed
+97
-57
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
804 | 804 | | |
805 | 805 | | |
806 | 806 | | |
807 | | - | |
808 | 807 | | |
809 | 808 | | |
810 | 809 | | |
| |||
2017 | 2016 | | |
2018 | 2017 | | |
2019 | 2018 | | |
| 2019 | + | |
2020 | 2020 | | |
2021 | 2021 | | |
2022 | 2022 | | |
2023 | | - | |
| 2023 | + | |
2024 | 2024 | | |
2025 | 2025 | | |
2026 | 2026 | | |
2027 | 2027 | | |
| 2028 | + | |
| 2029 | + | |
| 2030 | + | |
| 2031 | + | |
| 2032 | + | |
| 2033 | + | |
| 2034 | + | |
| 2035 | + | |
| 2036 | + | |
| 2037 | + | |
| 2038 | + | |
| 2039 | + | |
| 2040 | + | |
| 2041 | + | |
| 2042 | + | |
| 2043 | + | |
| 2044 | + | |
| 2045 | + | |
| 2046 | + | |
2028 | 2047 | | |
2029 | 2048 | | |
2030 | | - | |
| 2049 | + | |
| 2050 | + | |
| 2051 | + | |
| 2052 | + | |
| 2053 | + | |
2031 | 2054 | | |
2032 | | - | |
2033 | | - | |
| 2055 | + | |
2034 | 2056 | | |
2035 | 2057 | | |
| 2058 | + | |
2036 | 2059 | | |
2037 | | - | |
2038 | 2060 | | |
2039 | 2061 | | |
2040 | 2062 | | |
2041 | 2063 | | |
2042 | 2064 | | |
2043 | 2065 | | |
2044 | 2066 | | |
2045 | | - | |
| 2067 | + | |
| 2068 | + | |
| 2069 | + | |
| 2070 | + | |
| 2071 | + | |
2046 | 2072 | | |
2047 | | - | |
2048 | | - | |
| 2073 | + | |
2049 | 2074 | | |
2050 | 2075 | | |
| 2076 | + | |
2051 | 2077 | | |
2052 | | - | |
2053 | 2078 | | |
2054 | 2079 | | |
2055 | 2080 | | |
2056 | 2081 | | |
2057 | 2082 | | |
2058 | | - | |
| 2083 | + | |
| 2084 | + | |
2059 | 2085 | | |
2060 | | - | |
2061 | | - | |
2062 | | - | |
2063 | | - | |
2064 | | - | |
| 2086 | + | |
| 2087 | + | |
2065 | 2088 | | |
2066 | | - | |
| 2089 | + | |
| 2090 | + | |
2067 | 2091 | | |
2068 | | - | |
2069 | | - | |
| 2092 | + | |
2070 | 2093 | | |
2071 | 2094 | | |
| 2095 | + | |
2072 | 2096 | | |
2073 | | - | |
2074 | 2097 | | |
2075 | 2098 | | |
2076 | 2099 | | |
2077 | 2100 | | |
2078 | 2101 | | |
| 2102 | + | |
| 2103 | + | |
| 2104 | + | |
| 2105 | + | |
| 2106 | + | |
| 2107 | + | |
| 2108 | + | |
| 2109 | + | |
| 2110 | + | |
| 2111 | + | |
| 2112 | + | |
| 2113 | + | |
2079 | 2114 | | |
2080 | 2115 | | |
2081 | | - | |
2082 | 2116 | | |
2083 | 2117 | | |
2084 | 2118 | | |
| |||
2105 | 2139 | | |
2106 | 2140 | | |
2107 | 2141 | | |
2108 | | - | |
2109 | | - | |
2110 | | - | |
2111 | | - | |
2112 | | - | |
2113 | | - | |
2114 | | - | |
2115 | | - | |
2116 | | - | |
| 2142 | + | |
2117 | 2143 | | |
2118 | 2144 | | |
2119 | 2145 | | |
2120 | 2146 | | |
2121 | | - | |
| 2147 | + | |
| 2148 | + | |
| 2149 | + | |
| 2150 | + | |
| 2151 | + | |
2122 | 2152 | | |
2123 | | - | |
2124 | | - | |
| 2153 | + | |
2125 | 2154 | | |
2126 | 2155 | | |
| 2156 | + | |
2127 | 2157 | | |
2128 | | - | |
2129 | 2158 | | |
2130 | 2159 | | |
2131 | 2160 | | |
2132 | 2161 | | |
2133 | 2162 | | |
2134 | | - | |
| 2163 | + | |
| 2164 | + | |
| 2165 | + | |
| 2166 | + | |
| 2167 | + | |
2135 | 2168 | | |
2136 | | - | |
2137 | | - | |
| 2169 | + | |
2138 | 2170 | | |
2139 | 2171 | | |
| 2172 | + | |
2140 | 2173 | | |
2141 | | - | |
2142 | 2174 | | |
2143 | 2175 | | |
2144 | 2176 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
57 | 57 | | |
58 | 58 | | |
59 | 59 | | |
60 | | - | |
61 | 60 | | |
62 | 61 | | |
63 | 62 | | |
| |||
2993 | 2992 | | |
2994 | 2993 | | |
2995 | 2994 | | |
2996 | | - | |
2997 | | - | |
2998 | | - | |
| 2995 | + | |
2999 | 2996 | | |
3000 | 2997 | | |
3001 | 2998 | | |
| |||
3005 | 3002 | | |
3006 | 3003 | | |
3007 | 3004 | | |
3008 | | - | |
3009 | | - | |
3010 | | - | |
| 3005 | + | |
| 3006 | + | |
3011 | 3007 | | |
3012 | 3008 | | |
3013 | 3009 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2118 | 2118 | | |
2119 | 2119 | | |
2120 | 2120 | | |
| 2121 | + | |
| 2122 | + | |
| 2123 | + | |
| 2124 | + | |
| 2125 | + | |
2121 | 2126 | | |
2122 | 2127 | | |
2123 | 2128 | | |
| |||
2299 | 2304 | | |
2300 | 2305 | | |
2301 | 2306 | | |
| 2307 | + | |
2302 | 2308 | | |
2303 | 2309 | | |
2304 | 2310 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7217 | 7217 | | |
7218 | 7218 | | |
7219 | 7219 | | |
| 7220 | + | |
| 7221 | + | |
| 7222 | + | |
| 7223 | + | |
| 7224 | + | |
7220 | 7225 | | |
7221 | 7226 | | |
7222 | 7227 | | |
7223 | 7228 | | |
7224 | 7229 | | |
7225 | 7230 | | |
7226 | 7231 | | |
7227 | | - | |
7228 | | - | |
7229 | | - | |
7230 | 7232 | | |
7231 | 7233 | | |
7232 | 7234 | | |
| |||
7291 | 7293 | | |
7292 | 7294 | | |
7293 | 7295 | | |
7294 | | - | |
7295 | | - | |
7296 | | - | |
7297 | 7296 | | |
7298 | 7297 | | |
7299 | 7298 | | |
| |||
7572 | 7571 | | |
7573 | 7572 | | |
7574 | 7573 | | |
| 7574 | + | |
7575 | 7575 | | |
7576 | 7576 | | |
7577 | 7577 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2134 | 2134 | | |
2135 | 2135 | | |
2136 | 2136 | | |
| 2137 | + | |
| 2138 | + | |
| 2139 | + | |
| 2140 | + | |
| 2141 | + | |
2137 | 2142 | | |
2138 | 2143 | | |
2139 | 2144 | | |
| |||
2180 | 2185 | | |
2181 | 2186 | | |
2182 | 2187 | | |
| 2188 | + | |
2183 | 2189 | | |
2184 | 2190 | | |
2185 | 2191 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1397 | 1397 | | |
1398 | 1398 | | |
1399 | 1399 | | |
1400 | | - | |
| 1400 | + | |
1401 | 1401 | | |
1402 | | - | |
1403 | | - | |
| 1402 | + | |
| 1403 | + | |
1404 | 1404 | | |
| 1405 | + | |
| 1406 | + | |
1405 | 1407 | | |
1406 | 1408 | | |
1407 | 1409 | | |
| |||
1416 | 1418 | | |
1417 | 1419 | | |
1418 | 1420 | | |
1419 | | - | |
1420 | | - | |
1421 | | - | |
1422 | 1421 | | |
1423 | 1422 | | |
1424 | 1423 | | |
| |||
1444 | 1443 | | |
1445 | 1444 | | |
1446 | 1445 | | |
| 1446 | + | |
1447 | 1447 | | |
1448 | 1448 | | |
1449 | 1449 | | |
| |||
0 commit comments