linux/drivers/bluetooth
Huibin Hong f047159701 Bluetooth: hci_ldisc: fix race between open, close and send data
Fix the bug below, it may be reproduced after open and close bt about 7000 times:

<1>[73036.938137] Unable to handle kernel NULL pointer dereference at virtual address 0000001c
<1>[73036.939316] pgd = ffffff800886d000
<1>[73036.939627] [0000001c] *pgd=000000000fffe003, *pud=000000000fffe003, *pmd=0000000000000000
<0>[73036.940396] Internal error: Oops: 96000006 [#1] PREEMPT SMP
<4>[73036.940899] Modules linked in:
<4>[73036.941193] CPU: 2 PID: 2989 Comm: kworker/2:2 Not tainted 4.4.138 #3
<4>[73036.942409] Workqueue: events hci_uart_write_work
<4>[73036.942836] task: ffffffc00d688ac0 task.stack: ffffffc00b184000
<4>[73036.943365] PC is at _raw_spin_lock_irqsave+0x1c/0x50
<4>[73036.943815] LR is at skb_dequeue+0x20/0x74
<4>[73036.944185] pc : [<ffffff8008576398>] lr : [<ffffff800840f9a4>] pstate: 800001c5
<4>[73036.944832] sp : ffffffc00b187d00
<4>[73036.945127] x29: ffffffc00b187d00 x28: 0000000000000000
<4>[73036.945620] x27: 0000000000000000 x26: 0000000000000000
<4>[73036.946114] x25: ffffffc00e1280e0 x24: ffffffc00038d000
<4>[73036.946606] x23: ffffffc00e1271f8 x22: ffffffc00e127f00
<4>[73036.947099] x21: 000000000000001c x20: 0000000000000008
<4>[73036.947592] x19: 0000000000000000 x18: 0000000000000000
<4>[73036.948086] x17: 0000007fade08530 x16: ffffff80080e308c
<4>[73036.948579] x15: 0000000000000000 x14: 65736f6c63207568
<4>[73036.949073] x13: 205d303537373339 x12: 2e36333033375b0a
<4>[73036.949566] x11: 3220746e63666572 x10: 00000000000006f0
<4>[73036.950060] x9 : ffffffc00b187d30 x8 : ffffffc00d689210
<4>[73036.950553] x7 : 0000000000002d31 x6 : 0000000000000400
<4>[73036.951046] x5 : 0000000000113d82 x4 : 0000000000002f32
<4>[73036.951539] x3 : 0000000000000140 x2 : ffffffc00d688ac0
<4>[73036.952032] x1 : 0000000000000001 x0 : 000000000000001c
<4>[73037.068289] [<ffffff8008576398>] _raw_spin_lock_irqsave+0x1c/0x50
<4>[73037.068858] [<ffffff8008377094>] h4_dequeue+0x14/0x1c
<4>[73037.069335] [<ffffff8008376924>] hci_uart_write_work+0x50/0x12c
<4>[73037.069893] [<ffffff80080abbc8>] process_one_work+0x1b0/0x294
<4>[73037.070426] [<ffffff80080ac920>] worker_thread+0x2d8/0x398
<4>[73037.070935] [<ffffff80080b0f28>] kthread+0xc8/0xd8
<4>[73037.071388] [<ffffff8008082e80>] ret_from_fork+0x10/0x50

	thread0               		thread1
	   |				   |
	hci_uart_tty_close		hci_uart_write_work
	   |				   |
	h4_close			h4_dequeue
	   |				   |
	free (h4_struct) h4		   |
	   |             _raw_spin_lock_irqsave access h4 null pointer

Change-Id: I61d8ad5fb4c9349e0a304d2e87332681240f22e2
Signed-off-by: Huibin Hong <huibin.hong@rock-chips.com>
2019-02-22 14:31:44 +08:00
..
ath3k.c rk: revert to v4.4 2019-02-10 00:33:21 +08:00
bcm203x.c
bfusb.c bluetooth: bfusb: Replace GFP_ATOMIC with GFP_KERNEL in bfusb_send_frame() 2018-07-23 18:05:00 +02:00
bluecard_cs.c bluetooth: bluecard_cs: Replace GFP_ATOMIC with GFP_KERNEL in bluecard_hci_set_baud_rate() 2018-07-23 18:05:00 +02:00
bpa10x.c bluetooth: bpa10x: Replace GFP_ATOMIC with GFP_KERNEL in bpa10x_send_frame() 2018-07-23 18:05:00 +02:00
bt3c_cs.c
btbcm.c rk: revert to v4.4 2019-02-10 00:33:21 +08:00
btbcm.h Bluetooth: btbcm: Allow using btbcm_initialize() for reinit 2018-05-18 06:37:51 +02:00
btintel.c Bluetooth: btintel: Create common function for firmware download 2018-01-25 09:28:40 +01:00
btintel.h Bluetooth: btintel: Create common function for firmware download 2018-01-25 09:28:40 +01:00
btmrvl_debugfs.c Bluetooth: btmrvl: Re-use kstrtol_from_user() 2018-05-30 08:16:05 +02:00
btmrvl_drv.h Bluetooth: btmrvl: support sysfs initiated firmware coredump 2018-05-29 15:59:50 +02:00
btmrvl_main.c Bluetooth: btmrvl: support sysfs initiated firmware coredump 2018-05-29 15:59:50 +02:00
btmrvl_sdio.c bluetooth: btmrvl_sdio: Replace GFP_ATOMIC with GFP_KERNEL in btmrvl_sdio_card_to_host() 2018-07-23 18:05:00 +02:00
btmrvl_sdio.h
btmtkuart.c Bluetooth: mediatek: Fix memory leak 2018-08-21 16:56:20 +02:00
btqca.c Bluetooth: btqca: Introduce HCI_EV_VENDOR and use it 2018-08-06 21:25:05 +03:00
btqca.h Bluetooth: hci_qca: Add support for Qualcomm Bluetooth chip wcn3990 2018-08-03 14:44:07 +02:00
btqcomsmd.c Bluetooth: btqcomsmd: Fix rx/tx stats 2018-05-18 06:37:50 +02:00
btrsi.c Bluetooth: btrsi: remove unused including <linux/version.h> 2018-04-01 21:43:02 +03:00
btrtl.c Bluetooth: btrtl: Add support for a config filename postfix 2018-08-03 13:27:46 +02:00
btrtl.h Bluetooth: btrtl: Add support for a config filename postfix 2018-08-03 13:27:46 +02:00
btsdio.c rk: revert to v4.4 2019-02-10 00:33:21 +08:00
btusb.c rk: revert to v4.4 2019-02-10 00:33:21 +08:00
btwilink.c
dtl1_cs.c
h4_recv.h Bluetooth: bpa10x: Use separate h4_recv_buf helper 2018-04-01 14:25:32 +02:00
hci_ag6xx.c
hci_ath.c Bluetooth: hci_ath: Replace mdelay with msleep in ath_wakeup_ar3k 2018-02-07 09:47:04 +01:00
hci_bcm.c rk: revert to v4.4 2019-02-10 00:33:21 +08:00
hci_bcsp.c
hci_h4.c
hci_h5.c Bluetooth: Introduce BT_HCIUART_RTL configuration option 2018-08-09 20:48:10 +03:00
hci_intel.c rk: revert to v4.4 2019-02-10 00:33:21 +08:00
hci_ldisc.c Bluetooth: hci_ldisc: fix race between open, close and send data 2019-02-22 14:31:44 +08:00
hci_ll.c Bluetooth: hci_serdev: Move serdev_device_close/open into common hci_serdev code 2018-05-30 08:47:42 +02:00
hci_mrvl.c
hci_nokia.c bluetooth: hci_nokia: Don't include linux/unaligned/le_struct.h directly. 2018-06-17 08:38:55 +09:00
hci_qca.c rk: revert to v4.4 2019-02-10 00:33:21 +08:00
hci_serdev.c Bluetooth: hci_serdev: Fix HCI_UART_INIT_PENDING not working 2018-05-30 08:49:20 +02:00
hci_uart.h rk: revert to v4.4 2019-02-10 00:33:21 +08:00
hci_vhci.c rk: revert to v4.4 2019-02-10 00:33:21 +08:00
Kconfig rk: revert to v4.4 2019-02-10 00:33:21 +08:00
Makefile rk: revert to v4.4 2019-02-10 00:33:21 +08:00
rtk_btusb.c Bluetooth: rtk_btusb: update rtk_btusb to version 4.1.5 2018-09-17 10:46:47 +08:00
rtk_btusb.h Bluetooth: rtk_btusb: update rtk_btusb to version 4.1.5 2018-09-17 10:46:47 +08:00