OSDN Git Service

Bluetooth: hci_ldisc: Initialize hci_dev before open()
authorJeremy Cline <jcline@redhat.com>
Wed, 6 Feb 2019 17:54:16 +0000 (12:54 -0500)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 18 Feb 2019 12:54:53 +0000 (13:54 +0100)
commit32a7b4cbe93b0a0ef7e63d31ca69ce54736c4412
tree7d576c23965430a2d3b65ff5ec107e867f7e1e07
parent035a960e7a279a59d74585105dcd263559d74f24
Bluetooth: hci_ldisc: Initialize hci_dev before open()

The hci_dev struct hdev is referenced in work queues and timers started
by open() in some protocols. This creates a race between the
initialization function and the work or timer which can result hdev
being dereferenced while it is still null.

The syzbot report contains a reliable reproducer which causes a null
pointer dereference of hdev in hci_uart_write_work() by making the
memory allocation for hdev fail.

To fix this, ensure hdev is valid from before calling a protocol's
open() until after calling a protocol's close().

Reported-by: syzbot+257790c15bcdef6fe00c@syzkaller.appspotmail.com
Signed-off-by: Jeremy Cline <jcline@redhat.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/hci_ldisc.c