• Jeremy Cline's avatar
    Bluetooth: hci_ldisc: Initialize hci_dev before open() · 32a7b4cb
    Jeremy Cline authored
    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: default avatarJeremy Cline <jcline@redhat.com>
    Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
    32a7b4cb
hci_ldisc.c 20.2 KB