1. 24 5月, 2022 1 次提交
  2. 27 4月, 2022 3 次提交
  3. 19 3月, 2022 1 次提交
    • L
      Bluetooth: Fix use after free in hci_send_acl · f63d24ba
      Luiz Augusto von Dentz 提交于
      This fixes the following trace caused by receiving
      HCI_EV_DISCONN_PHY_LINK_COMPLETE which does call hci_conn_del without
      first checking if conn->type is in fact AMP_LINK and in case it is
      do properly cleanup upper layers with hci_disconn_cfm:
      
       ==================================================================
          BUG: KASAN: use-after-free in hci_send_acl+0xaba/0xc50
          Read of size 8 at addr ffff88800e404818 by task bluetoothd/142
      
          CPU: 0 PID: 142 Comm: bluetoothd Not tainted
          5.17.0-rc5-00006-gda4022eeac1a #7
          Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
          rel-1.14.0-0-g155821a1990b-prebuilt.qemu.org 04/01/2014
          Call Trace:
           <TASK>
           dump_stack_lvl+0x45/0x59
           print_address_description.constprop.0+0x1f/0x150
           kasan_report.cold+0x7f/0x11b
           hci_send_acl+0xaba/0xc50
           l2cap_do_send+0x23f/0x3d0
           l2cap_chan_send+0xc06/0x2cc0
           l2cap_sock_sendmsg+0x201/0x2b0
           sock_sendmsg+0xdc/0x110
           sock_write_iter+0x20f/0x370
           do_iter_readv_writev+0x343/0x690
           do_iter_write+0x132/0x640
           vfs_writev+0x198/0x570
           do_writev+0x202/0x280
           do_syscall_64+0x38/0x90
           entry_SYSCALL_64_after_hwframe+0x44/0xae
          RSP: 002b:00007ffce8a099b8 EFLAGS: 00000246 ORIG_RAX: 0000000000000014
          Code: 0f 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b8 0f 1f 00 f3
          0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 14 00 00 00 0f 05
          <48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 89 54 24 1c 48 89 74 24 10
          RDX: 0000000000000001 RSI: 00007ffce8a099e0 RDI: 0000000000000015
          RAX: ffffffffffffffda RBX: 00007ffce8a099e0 RCX: 00007f788fc3cf77
          R10: 00007ffce8af7080 R11: 0000000000000246 R12: 000055e4ccf75580
          RBP: 0000000000000015 R08: 0000000000000002 R09: 0000000000000001
          </TASK>
          R13: 000055e4ccf754a0 R14: 000055e4ccf75cd0 R15: 000055e4ccf4a6b0
      
          Allocated by task 45:
              kasan_save_stack+0x1e/0x40
              __kasan_kmalloc+0x81/0xa0
              hci_chan_create+0x9a/0x2f0
              l2cap_conn_add.part.0+0x1a/0xdc0
              l2cap_connect_cfm+0x236/0x1000
              le_conn_complete_evt+0x15a7/0x1db0
              hci_le_conn_complete_evt+0x226/0x2c0
              hci_le_meta_evt+0x247/0x450
              hci_event_packet+0x61b/0xe90
              hci_rx_work+0x4d5/0xc50
              process_one_work+0x8fb/0x15a0
              worker_thread+0x576/0x1240
              kthread+0x29d/0x340
              ret_from_fork+0x1f/0x30
      
          Freed by task 45:
              kasan_save_stack+0x1e/0x40
              kasan_set_track+0x21/0x30
              kasan_set_free_info+0x20/0x30
              __kasan_slab_free+0xfb/0x130
              kfree+0xac/0x350
              hci_conn_cleanup+0x101/0x6a0
              hci_conn_del+0x27e/0x6c0
              hci_disconn_phylink_complete_evt+0xe0/0x120
              hci_event_packet+0x812/0xe90
              hci_rx_work+0x4d5/0xc50
              process_one_work+0x8fb/0x15a0
              worker_thread+0x576/0x1240
              kthread+0x29d/0x340
              ret_from_fork+0x1f/0x30
      
          The buggy address belongs to the object at ffff88800c0f0500
          The buggy address is located 24 bytes inside of
          which belongs to the cache kmalloc-128 of size 128
          The buggy address belongs to the page:
          128-byte region [ffff88800c0f0500, ffff88800c0f0580)
          flags: 0x100000000000200(slab|node=0|zone=1)
          page:00000000fe45cd86 refcount:1 mapcount:0
          mapping:0000000000000000 index:0x0 pfn:0xc0f0
          raw: 0000000000000000 0000000080100010 00000001ffffffff
          0000000000000000
          raw: 0100000000000200 ffffea00003a2c80 dead000000000004
          ffff8880078418c0
          page dumped because: kasan: bad access detected
          ffff88800c0f0400: 00 00 00 00 00 00 00 00 00 00 00 00 00 fc fc fc
          Memory state around the buggy address:
          >ffff88800c0f0500: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
          ffff88800c0f0480: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
          ffff88800c0f0580: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                                      ^
          ==================================================================
          ffff88800c0f0600: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      Reported-by: NSönke Huster <soenke.huster@eknoes.de>
      Tested-by: NSönke Huster <soenke.huster@eknoes.de>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      f63d24ba
  4. 04 3月, 2022 1 次提交
    • N
      Bluetooth: hci_event: Add missing locking on hdev in hci_le_ext_adv_term_evt · 728abc01
      Niels Dossche 提交于
      Both hci_find_adv_instance and hci_remove_adv_instance have a comment
      above their function definition saying that these two functions require
      the caller to hold the hdev->lock lock. However, hci_le_ext_adv_term_evt
      does not acquire that lock and neither does its caller hci_le_meta_evt
      (hci_le_meta_evt calls hci_le_ext_adv_term_evt via an indirect function
      call because of the lookup in hci_le_ev_table).
      
      The other event handlers all acquire and release the hdev->lock and they
      follow the rule that hci_find_adv_instance and hci_remove_adv_instance
      must be called while holding the hdev->lock lock.
      
      The solution is to make sure hci_le_ext_adv_term_evt also acquires and
      releases the hdev->lock lock. The check on ev->status which logs a
      warning and does an early return is not covered by the lock because
      other functions also access ev->status without holding the lock.
      Signed-off-by: NNiels Dossche <niels.dossche@ugent.be>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      728abc01
  5. 26 1月, 2022 1 次提交
  6. 25 1月, 2022 1 次提交
  7. 15 1月, 2022 1 次提交
  8. 12 1月, 2022 1 次提交
  9. 06 1月, 2022 1 次提交
  10. 23 12月, 2021 3 次提交
  11. 08 12月, 2021 15 次提交
  12. 26 11月, 2021 4 次提交
  13. 25 11月, 2021 1 次提交
  14. 16 11月, 2021 4 次提交
    • A
      Bluetooth: Attempt to clear HCI_LE_ADV on adv set terminated error event · 1f9d5657
      Archie Pusaka 提交于
      We should clear the flag if the adv instance removed due to receiving
      this error status is the last one we have.
      Signed-off-by: NArchie Pusaka <apusaka@chromium.org>
      Reviewed-by: NMiao-chen Chou <mcchou@chromium.org>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      1f9d5657
    • A
      Bluetooth: Ignore HCI_ERROR_CANCELLED_BY_HOST on adv set terminated event · 0f281a5e
      Archie Pusaka 提交于
      This event is received when the controller stops advertising,
      specifically for these three reasons:
      (a) Connection is successfully created (success).
      (b) Timeout is reached (error).
      (c) Number of advertising events is reached (error).
      (*) This event is NOT generated when the host stops the advertisement.
      Refer to the BT spec ver 5.3 vol 4 part E sec 7.7.65.18. Note that the
      section was revised from BT spec ver 5.0 vol 2 part E sec 7.7.65.18
      which was ambiguous about (*).
      
      Some chips (e.g. RTL8822CE) send this event when the host stops the
      advertisement with status = HCI_ERROR_CANCELLED_BY_HOST (due to (*)
      above). This is treated as an error and the advertisement will be
      removed and userspace will be informed via MGMT event.
      
      On suspend, we are supposed to temporarily disable advertisements,
      and continue advertising on resume. However, due to the behavior
      above, the advertisements are removed instead.
      
      This patch returns early if HCI_ERROR_CANCELLED_BY_HOST is received.
      
      Btmon snippet of the unexpected behavior:
      @ MGMT Command: Remove Advertising (0x003f) plen 1
              Instance: 1
      < HCI Command: LE Set Extended Advertising Enable (0x08|0x0039) plen 6
              Extended advertising: Disabled (0x00)
              Number of sets: 1 (0x01)
              Entry 0
                Handle: 0x01
                Duration: 0 ms (0x00)
                Max ext adv events: 0
      > HCI Event: LE Meta Event (0x3e) plen 6
            LE Advertising Set Terminated (0x12)
              Status: Operation Cancelled by Host (0x44)
              Handle: 1
              Connection handle: 0
              Number of completed extended advertising events: 5
      > HCI Event: Command Complete (0x0e) plen 4
            LE Set Extended Advertising Enable (0x08|0x0039) ncmd 2
              Status: Success (0x00)
      Signed-off-by: NArchie Pusaka <apusaka@chromium.org>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      0f281a5e
    • J
      Bluetooth: fix uninitialized variables notify_evt · a27c519a
      Jackie Liu 提交于
      Coverity Scan report:
      
      [...]
      *** CID 1493985:  Uninitialized variables  (UNINIT)
      /net/bluetooth/hci_event.c: 4535 in hci_sync_conn_complete_evt()
      4529
      4530     	/* Notify only in case of SCO over HCI transport data path which
      4531     	 * is zero and non-zero value shall be non-HCI transport data path
      4532     	 */
      4533     	if (conn->codec.data_path == 0) {
      4534     		if (hdev->notify)
      >>>     CID 1493985:  Uninitialized variables  (UNINIT)
      >>>     Using uninitialized value "notify_evt" when calling "*hdev->notify".
      4535     			hdev->notify(hdev, notify_evt);
      4536     	}
      4537
      4538     	hci_connect_cfm(conn, ev->status);
      4539     	if (ev->status)
      4540     		hci_conn_del(conn);
      [...]
      
      Although only btusb uses air_mode, and he only handles HCI_NOTIFY_ENABLE_SCO_CVSD
      and HCI_NOTIFY_ENABLE_SCO_TRANSP, there is still a very small chance that
      ev->air_mode is not equal to 0x2 and 0x3, but notify_evt is initialized to
      HCI_NOTIFY_ENABLE_SCO_CVSD or HCI_NOTIFY_ENABLE_SCO_TRANSP. the context is
      maybe not correct.
      
      Let us directly use the required function instead of re-initializing it,
      so as to restore the original logic and make the code more correct.
      
      Addresses-Coverity: ("Uninitialized variables")
      Fixes: f4f9fa0c ("Bluetooth: Allow usb to auto-suspend when SCO use	non-HCI transport")
      Suggested-by: NMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: NJackie Liu <liuyun01@kylinos.cn>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      a27c519a
    • P
      Bluetooth: stop proccessing malicious adv data · 3a56ef71
      Pavel Skripkin 提交于
      Syzbot reported slab-out-of-bounds read in hci_le_adv_report_evt(). The
      problem was in missing validaion check.
      
      We should check if data is not malicious and we can read next data block.
      If we won't check ptr validness, code can read a way beyond skb->end and
      it can cause problems, of course.
      
      Fixes: e95beb41 ("Bluetooth: hci_le_adv_report_evt code refactoring")
      Reported-and-tested-by: syzbot+e3fcb9c4f3c2a931dc40@syzkaller.appspotmail.com
      Signed-off-by: NPavel Skripkin <paskripkin@gmail.com>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      3a56ef71
  15. 29 10月, 2021 2 次提交