Re: [PATCH] Bluetooth: Fix SMP context tracking leading to a kernel crash

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Johan,

> The HCI_CONN_LE_SMP_PEND flag is supposed to indicate whether we have an
> SMP context or not. If the context creation fails, or some other error
> is indicated between setting the flag and creating the context the flag
> must be cleared first.
> 
> This patch ensures that smp_chan_create() clears the flag in case of
> allocation failure as well as reorders code in smp_cmd_security_req()
> that could lead to returning an error between setting the flag and
> creating the context.
> 
> Without the patch the following kind of kernel crash could be observed
> (this one because of unacceptable authentication requirements in a
> Security Request):
> 
> [  +0.000855] kernel BUG at net/bluetooth/smp.c:606!
> [  +0.000000] invalid opcode: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
> [  +0.000000] CPU: 0 PID: 58 Comm: kworker/u5:2 Tainted: G        W     3.16.0-rc1+ #785
> [  +0.008391] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
> [  +0.000000] Workqueue: hci0 hci_rx_work
> [  +0.000000] task: f4dc8f90 ti: f4ef0000 task.ti: f4ef0000
> [  +0.000000] EIP: 0060:[<c13432b6>] EFLAGS: 00010246 CPU: 0
> [  +0.000000] EIP is at smp_chan_destroy+0x1e/0x145
> [  +0.000709] EAX: f46db870 EBX: 00000000 ECX: 00000000 EDX: 00000005
> [  +0.000000] ESI: f46db870 EDI: f46db870 EBP: f4ef1dc0 ESP: f4ef1db0
> [  +0.000000]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
> [  +0.000000] CR0: 8005003b CR2: b666b0b0 CR3: 00022000 CR4: 00000690
> [  +0.000000] DR0: 00000000 DR1: 00000000 DR2: 00000000 DR3: 00000000
> [  +0.000000] DR6: fffe0ff0 DR7: 00000400
> [  +0.000000] Stack:
> [  +0.000000]  00000005 f17b7840 f46db870 f4ef1dd4 f4ef1de4 c1343441 c134342e 00000000
> [  +0.000000]  c1343441 00000005 00000002 00000000 f17b7840 f4ef1e38 c134452a 00002aae
> [  +0.000000]  01ef1e00 00002aae f46bd980 f46db870 00000039 ffffffff 00000007 f4ef1e34
> [  +0.000000] Call Trace:
> [  +0.000000]  [<c1343441>] smp_failure+0x64/0x6c
> [  +0.000000]  [<c134342e>] ? smp_failure+0x51/0x6c
> [  +0.000000]  [<c1343441>] ? smp_failure+0x64/0x6c
> [  +0.000000]  [<c134452a>] smp_sig_channel+0xad6/0xafc
> [  +0.000000]  [<c1053b61>] ? vprintk_emit+0x343/0x366
> [  +0.000000]  [<c133f34e>] l2cap_recv_frame+0x1337/0x1ac4
> [  +0.000000]  [<c133f34e>] ? l2cap_recv_frame+0x1337/0x1ac4
> [  +0.000000]  [<c1172307>] ? __dynamic_pr_debug+0x3e/0x40
> [  +0.000000]  [<c11702a1>] ? debug_smp_processor_id+0x12/0x14
> [  +0.000000]  [<c1340bc9>] l2cap_recv_acldata+0xe8/0x239
> [  +0.000000]  [<c1340bc9>] ? l2cap_recv_acldata+0xe8/0x239
> [  +0.000000]  [<c1169931>] ? __const_udelay+0x1a/0x1c
> [  +0.000000]  [<c131f120>] hci_rx_work+0x1a1/0x286
> [  +0.000000]  [<c137244e>] ? mutex_unlock+0x8/0xa
> [  +0.000000]  [<c131f120>] ? hci_rx_work+0x1a1/0x286
> [  +0.000000]  [<c1038fe5>] process_one_work+0x128/0x1df
> [  +0.000000]  [<c1038fe5>] ? process_one_work+0x128/0x1df
> [  +0.000000]  [<c10392df>] worker_thread+0x222/0x2de
> [  +0.000000]  [<c10390bd>] ? process_scheduled_works+0x21/0x21
> [  +0.000000]  [<c103d34c>] kthread+0x82/0x87
> [  +0.000000]  [<c1040000>] ? create_new_namespaces+0x90/0x105
> [  +0.000000]  [<c13738e1>] ret_from_kernel_thread+0x21/0x30
> [  +0.000000]  [<c103d2ca>] ? __kthread_parkme+0x50/0x50
> [  +0.000000] Code: 65 f4 89 f0 5b 5e 5f 5d 8d 67 f8 5f c3 57 8d 7c 24 08 83 e4 f8 ff 77 fc 55 89 e5 57 89 c7 56 53 52 8b 98 e0 00 00 00 85 db 75 02 <0f> 0b 8b b3 80 00 00 00 8b 00 c1 ee 03 83 e6 01 89 f2 e8 ef 09
> [  +0.000000] EIP: [<c13432b6>] smp_chan_destroy+0x1e/0x145 SS:ESP 0068:f4ef1db0
> 
> Signed-off-by: Johan Hedberg <johan.hedberg@xxxxxxxxx>
> ---
> net/bluetooth/smp.c | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux