OpenCloudOS-Kernel/net/bluetooth
Edward Adam Davis b803f30ea2 bluetooth/l2cap: sync sock recv cb and release
[ Upstream commit 89e856e124f9ae548572c56b1b70c2255705f8fe ]

The problem occurs between the system call to close the sock and hci_rx_work,
where the former releases the sock and the latter accesses it without lock protection.

           CPU0                       CPU1
           ----                       ----
           sock_close                 hci_rx_work
	   l2cap_sock_release         hci_acldata_packet
	   l2cap_sock_kill            l2cap_recv_frame
	   sk_free                    l2cap_conless_channel
	                              l2cap_sock_recv_cb

If hci_rx_work processes the data that needs to be received before the sock is
closed, then everything is normal; Otherwise, the work thread may access the
released sock when receiving data.

Add a chan mutex in the rx callback of the sock to achieve synchronization between
the sock release and recv cb.

Sock is dead, so set chan data to NULL, avoid others use invalid sock pointer.

Reported-and-tested-by: syzbot+b7f6f8c9303466e16c8a@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@qq.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-07-25 09:50:53 +02:00
..
bnep Bluetooth: Consolidate code around sk_alloc into a helper function 2023-08-11 11:36:50 -07:00
cmtp Merge branch 'signal-for-v5.17' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace 2022-01-17 05:49:30 +02:00
hidp Bluetooth: Init sk_peer_* on bt_sock_alloc 2023-08-11 11:37:22 -07:00
rfcomm Bluetooth: rfcomm: Fix null-ptr-deref in rfcomm_check_security 2024-03-26 18:19:14 -04:00
6lowpan.c iov_iter work; most of that is about getting rid of 2022-12-12 18:29:54 -08:00
Kconfig Bluetooth: Remove BT_HS 2024-03-26 18:19:37 -04:00
Makefile Bluetooth: Remove BT_HS 2024-03-26 18:19:37 -04:00
af_bluetooth.c Bluetooth: af_bluetooth: Fix deadlock 2024-03-26 18:19:38 -04:00
aosp.c Bluetooth: Fix null pointer deref on unexpected status event 2022-08-08 17:04:37 -07:00
aosp.h Bluetooth: aosp: Support AOSP Bluetooth Quality Report 2021-11-02 19:37:52 +01:00
coredump.c Bluetooth: Remove unnecessary NULL check before vfree() 2023-08-11 11:56:54 -07:00
ecdh_helper.c Bluetooth: Use crypto_wait_req 2023-02-13 18:34:48 +08:00
ecdh_helper.h Fix misc new gcc warnings 2021-04-27 17:05:53 -07:00
eir.c Bluetooth: Fix eir name length 2024-03-26 18:19:39 -04:00
eir.h Bluetooth: Add initial implementation of BIS connections 2022-07-22 17:13:56 -07:00
hci_codec.c Bluetooth: Fix support for Read Local Supported Codecs V2 2022-12-02 13:09:31 -08:00
hci_codec.h Bluetooth: Add support for Read Local Supported Codecs V2 2021-09-07 14:09:18 -07:00
hci_conn.c bluetooth/hci: disallow setting handle bigger than HCI_CONN_HANDLE_MAX 2024-07-11 12:49:12 +02:00
hci_core.c Bluetooth: hci_core: cancel all works upon hci_unregister_dev() 2024-07-25 09:50:53 +02:00
hci_debugfs.c Bluetooth: Fix TOCTOU in HCI debugfs implementation 2024-04-10 16:35:49 +02:00
hci_debugfs.h Bluetooth: hci_core: Move all debugfs handling to hci_debugfs.c 2021-09-22 16:17:13 +02:00
hci_event.c Bluetooth: Ignore too large handle values in BIG 2024-07-11 12:49:11 +02:00
hci_request.c Bluetooth: Fix memory leak in hci_req_sync_complete() 2024-04-17 11:19:25 +02:00
hci_request.h Bluetooth: Delete unused hci_req_prepare_suspend() declaration 2023-09-20 10:55:29 -07:00
hci_sock.c Bluetooth: HCI: Remove HCI_AMP support 2024-06-12 11:11:55 +02:00
hci_sync.c Bluetooth: HCI: Remove HCI_AMP support 2024-06-12 11:11:55 +02:00
hci_sysfs.c Bluetooth: Fix double free in hci_conn_cleanup 2023-11-28 17:19:38 +00:00
iso.c Bluetooth: ISO: Check socket flag instead of hcon 2024-07-11 12:49:11 +02:00
l2cap_core.c Bluetooth: fix connection setup in l2cap_connect 2024-06-21 14:38:34 +02:00
l2cap_sock.c bluetooth/l2cap: sync sock recv cb and release 2024-07-25 09:50:53 +02:00
leds.c
leds.h
lib.c Bluetooth: Fix EALREADY and ELOOP cases in bt_status() 2022-12-12 14:19:24 -08:00
mgmt.c Bluetooth: HCI: Remove HCI_AMP support 2024-06-12 11:11:55 +02:00
mgmt_config.c Bluetooth: mgmt: Use the correct print format 2021-06-26 07:12:42 +02:00
mgmt_config.h Bluetooth: mgmt: Add commands for runtime configuration 2020-06-18 13:11:03 +03:00
mgmt_util.c Bluetooth: Implement support for Mesh 2022-09-06 13:18:24 -07:00
mgmt_util.h Bluetooth: Fix a buffer overflow in mgmt_mesh_add() 2023-01-17 15:50:10 -08:00
msft.c Bluetooth: msft: fix slab-use-after-free in msft_do_close() 2024-05-17 12:02:21 +02:00
msft.h Bluetooth: msft: fix slab-use-after-free in msft_do_close() 2024-05-17 12:02:21 +02:00
sco.c Bluetooth: L2CAP: Fix div-by-zero in l2cap_le_flowctl_init() 2024-05-25 16:22:53 +02:00
selftest.c crypto: ecdh - move curve_id of ECDH from the key to algorithm name 2021-03-13 00:04:03 +11:00
selftest.h
smp.c Bluetooth: MGMT/SMP: Fix address type when using SMP over BREDR/LE 2024-01-01 12:42:40 +00:00
smp.h Bluetooth: use inclusive language in SMP 2021-06-26 07:12:37 +02:00