Re: [PATCH] Bluetooth: Fix NULL pointer dereference in bt_sock_recvmsg

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

 



+Andrew

On 11 January 2017 at 17:27, Ezequiel Garcia
<ezequiel@xxxxxxxxxxxxxxxxxxxx> wrote:
> On 29 December 2016 at 09:51, Ezequiel Garcia
> <ezequiel@xxxxxxxxxxxxxxxxxxxx> wrote:
>> As per the comment in include/linux/net.h, the recvfrom handlers
>> should expect msg_name to be NULL. However, bt_sock_recvmsg()
>> is currently not checking it, which could lead to a NULL pointer
>> dereference.
>>
>> The following NULL pointer dereference was produced while testing
>> L2CAP datagram reception. Note that the kernel is tainted due to
>> the r8723bs module being inserted. However, it seems the fix still
>> applies.
>>
>> $ l2test -r -G
>> l2test[326]: Receiving ...
>> Unable to handle kernel NULL pointer dereference at virtual address 00000000
>> pgd = ee008000
>> [00000000] *pgd=7f896835
>> Internal error: Oops: 817 [#1] PREEMPT SMP ARM
>> Modules linked in: r8723bs(O)
>> CPU: 0 PID: 326 Comm: l2test Tainted: G           O 4.8.0 #1
>> Hardware name: Allwinner sun7i (A20) Family
>> task: ef1c6880 task.stack: eea70000
>> PC is at __memzero+0x58/0x80
>> LR is at l2cap_skb_msg_name+0x1c/0x4c
>> pc : [<c02c47d8>]    lr : [<c0506278>]    psr: 00070013
>> sp : eea71e60  ip : 00000000  fp : 00034e1c
>> r10: 00000000  r9 : 00000000  r8 : eea71ed4
>> r7 : 000002a0  r6 : eea71ed8  r5 : 00000000  r4 : ee4a5d80
>> r3 : 00000000  r2 : 00000000  r1 : 0000000e  r0 : 00000000
>> Flags: nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM Segment none
>> Control: 10c5387d  Table: 7600806a  DAC: 00000051
>> Process l2test (pid: 326, stack limit = 0xeea70210)
>> Stack: (0xeea71e60 to 0xeea72000)
>> 1e60: ee4a5d80 eeac2800 000002a0 c04d7114 173eefa0 00000000 c06ca68e 00000000
>> 1e80: 00000001 eeac2800 eef23500 00000000 000002a0 eea71ed4 eea70000 c0504d50
>> 1ea0: 00000000 00000000 eef23500 00000000 00000000 c044e8a0 eea71edc eea9f904
>> 1ec0: bef89aa0 fffffff7 00000000 00035008 000002a0 00000000 00000000 00000000
>> 1ee0: 00000000 00000000 eea71ed4 00000000 00000000 00000000 00004000 00000000
>> 1f00: 0000011b c01078c4 eea70000 c044e5e4 00000000 00000000 642f0001 6c2f7665
>> 1f20: 0000676f 00000000 00000000 00000000 00000000 00000000 00000000 00000000
>> 1f40: 00000000 00000000 00000000 00000000 00000000 ffffffff 00000001 bef89ad8
>> 1f60: 000000a8 c01078c4 eea70000 00000000 00034e1c c01e6c74 00000000 00000000
>> 1f80: 00034e1c 000341f8 00000000 00000123 c01078c4 c044e90c 00000000 00000000
>> 1fa0: 000002a0 c0107700 00034e1c 000341f8 00000003 00035008 000002a0 00000000
>> 1fc0: 00034e1c 000341f8 00000000 00000123 00000000 00000000 00011ffc 00034e1c
>> 1fe0: 00000000 bef89aa4 0001211c b6eebb60 60070010 00000003 00000000 00000000
>> [<c02c47d8>] (__memzero) from [<c0506278>] (l2cap_skb_msg_name+0x1c/0x4c)
>> [<c0506278>] (l2cap_skb_msg_name) from [<c04d7114>] (bt_sock_recvmsg+0x128/0x160)
>> [<c04d7114>] (bt_sock_recvmsg) from [<c0504d50>] (l2cap_sock_recvmsg+0x98/0x134)
>> [<c0504d50>] (l2cap_sock_recvmsg) from [<c044e8a0>] (SyS_recvfrom+0x94/0xec)
>> [<c044e8a0>] (SyS_recvfrom) from [<c044e90c>] (SyS_recv+0x14/0x1c)
>> [<c044e90c>] (SyS_recv) from [<c0107700>] (ret_fast_syscall+0x0/0x3c)
>> Code: e3110010 18a0500c e49de004 e3110008 (18a0000c)
>> ---[ end trace 224e35e79fe06b42 ]---
>>
>> Signed-off-by: Ezequiel Garcia <ezequiel@xxxxxxxxxxxxxxxxxxxx>
>> ---
>>  net/bluetooth/af_bluetooth.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/net/bluetooth/af_bluetooth.c b/net/bluetooth/af_bluetooth.c
>> index 1aff2da9bc74..cfb2faba46de 100644
>> --- a/net/bluetooth/af_bluetooth.c
>> +++ b/net/bluetooth/af_bluetooth.c
>> @@ -245,7 +245,7 @@ int bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
>>         if (err == 0) {
>>                 sock_recv_ts_and_drops(msg, sk, skb);
>>
>> -               if (bt_sk(sk)->skb_msg_name)
>> +               if (msg->msg_name && bt_sk(sk)->skb_msg_name)
>>                         bt_sk(sk)->skb_msg_name(skb, msg->msg_name,
>>                                                 &msg->msg_namelen);
>>         }
>> --
>> 2.11.0
>>
>
> Any feedback here?

Ping.
-- 
Ezequiel García, VanguardiaSur
www.vanguardiasur.com.ar
--
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