mbox series

[SRU,M,0/2] CVE-2024-26890

Message ID 20240430231901.76648-1-bethany.jamison@canonical.com
Headers show
Series CVE-2024-26890 | expand

Message

Bethany Jamison April 30, 2024, 11:18 p.m. UTC
[Impact]

 In the Linux kernel, the following vulnerability has been resolved:

 Bluetooth: btrtl: fix out of bounds memory access

 The problem is detected by KASAN.
 btrtl driver uses private hci data to store 'struct btrealtek_data'.
 If btrtl driver is used with btusb, then memory for private hci data
 is allocated in btusb. But no private data is allocated after hci_dev,
 when btrtl is used with hci_h5.

 This commit adds memory allocation for hci_h5 case.

  ==================================================================
  BUG: KASAN: slab-out-of-bounds in btrtl_initialize+0x6cc/0x958 [btrtl]
  Write of size 8 at addr ffff00000f5a5748 by task kworker/u9:0/76

  Hardware name: Pine64 PinePhone (1.2) (DT)
  Workqueue: hci0 hci_power_on [bluetooth]
  Call trace:
   dump_backtrace+0x9c/0x128
   show_stack+0x20/0x38
   dump_stack_lvl+0x48/0x60
   print_report+0xf8/0x5d8
   kasan_report+0x90/0xd0
   __asan_store8+0x9c/0xc0
         [btrtl]
   h5_btrtl_setup+0xd0/0x2f8 [hci_uart]
   h5_setup+0x50/0x80 [hci_uart]
   hci_uart_setup+0xd4/0x260 [hci_uart]
   hci_dev_open_sync+0x1cc/0xf68 [bluetooth]
   hci_dev_do_open+0x34/0x90 [bluetooth]
   hci_power_on+0xc4/0x3c8 [bluetooth]
   process_one_work+0x328/0x6f0
   worker_thread+0x410/0x778
   kthread+0x168/0x178
   ret_from_fork+0x10/0x20

 Allocated by task 53:
   kasan_save_stack+0x3c/0x68
   kasan_save_track+0x20/0x40
   kasan_save_alloc_info+0x68/0x78
   __kasan_kmalloc+0xd4/0xd8
   __kmalloc+0x1b4/0x3b0
   hci_alloc_dev_priv+0x28/0xa58 [bluetooth]
   hci_uart_register_device+0x118/0x4f8 [hci_uart]
   h5_serdev_probe+0xf4/0x178 [hci_uart]
   serdev_drv_probe+0x54/0xa0
   really_probe+0x254/0x588
   __driver_probe_device+0xc4/0x210
   driver_probe_device+0x64/0x160
   __driver_attach_async_helper+0x88/0x158
   async_run_entry_fn+0xd0/0x388
   process_one_work+0x328/0x6f0
   worker_thread+0x410/0x778
   kthread+0x168/0x178
   ret_from_fork+0x10/0x20

 Last potentially related work creation:
   kasan_save_stack+0x3c/0x68
   __kasan_record_aux_stack+0xb0/0x150
   kasan_record_aux_stack_noalloc+0x14/0x20
   __queue_work+0x33c/0x960
   queue_work_on+0x98/0xc0
   hci_recv_frame+0xc8/0x1e8 [bluetooth]
   h5_complete_rx_pkt+0x2c8/0x800 [hci_uart]
   h5_rx_payload+0x98/0xb8 [hci_uart]
   h5_recv+0x158/0x3d8 [hci_uart]
   hci_uart_receive_buf+0xa0/0xe8 [hci_uart]
   ttyport_receive_buf+0xac/0x178
   flush_to_ldisc+0x130/0x2c8
   process_one_work+0x328/0x6f0
   worker_thread+0x410/0x778
   kthread+0x168/0x178
   ret_from_fork+0x10/0x20

 Second to last potentially related work creation:
   kasan_save_stack+0x3c/0x68
   __kasan_record_aux_stack+0xb0/0x150
   kasan_record_aux_stack_noalloc+0x14/0x20
   __queue_work+0x788/0x960
   queue_work_on+0x98/0xc0
   __hci_cmd_sync_sk+0x23c/0x7a0 [bluetooth]
   __hci_cmd_sync+0x24/0x38 [bluetooth]
   btrtl_initialize+0x760/0x958 [btrtl]
   h5_btrtl_setup+0xd0/0x2f8 [hci_uart]
   h5_setup+0x50/0x80 [hci_uart]
   hci_uart_setup+0xd4/0x260 [hci_uart]
   hci_dev_open_sync+0x1cc/0xf68 [bluetooth]
   hci_dev_do_open+0x34/0x90 [bluetooth]
   hci_power_on+0xc4/0x3c8 [bluetooth]
   process_one_work+0x328/0x6f0
   worker_thread+0x410/0x778
   kthread+0x168/0x178
   ret_from_fork+0x10/0x20

[Fix]

Mantic:	Clean cherry-pick from prereq commit and linux-6.6.y
Jammy:	not-affected
Focal:	not-affected
Bionic:	not-affected
Xenial:	not-affected
Trusty:	not-affected

[Test Case]

Compile and boot tested.

[Where problems could occur]

This fix affects those who use the bluetooth driver for Realtek 
devices, an issue with this fix would be visable to the user via
data corruption, unpredicted system behavior, or a system crash.

Andrey Skvortsov (2):
  Bluetooth: hci_h5: Add ability to allocate memory for private data
  Bluetooth: btrtl: fix out of bounds memory access

 drivers/bluetooth/hci_h5.c     |  5 ++++-
 drivers/bluetooth/hci_serdev.c |  9 +++++----
 drivers/bluetooth/hci_uart.h   | 12 +++++++++++-
 3 files changed, 20 insertions(+), 6 deletions(-)

Comments

Stefan Bader May 10, 2024, 12:49 p.m. UTC | #1
On 01.05.24 01:18, Bethany Jamison wrote:
> [Impact]
> 
>   In the Linux kernel, the following vulnerability has been resolved:
> 
>   Bluetooth: btrtl: fix out of bounds memory access
> 
>   The problem is detected by KASAN.
>   btrtl driver uses private hci data to store 'struct btrealtek_data'.
>   If btrtl driver is used with btusb, then memory for private hci data
>   is allocated in btusb. But no private data is allocated after hci_dev,
>   when btrtl is used with hci_h5.
> 
>   This commit adds memory allocation for hci_h5 case.
> 
>    ==================================================================
>    BUG: KASAN: slab-out-of-bounds in btrtl_initialize+0x6cc/0x958 [btrtl]
>    Write of size 8 at addr ffff00000f5a5748 by task kworker/u9:0/76
> 
>    Hardware name: Pine64 PinePhone (1.2) (DT)
>    Workqueue: hci0 hci_power_on [bluetooth]
>    Call trace:
>     dump_backtrace+0x9c/0x128
>     show_stack+0x20/0x38
>     dump_stack_lvl+0x48/0x60
>     print_report+0xf8/0x5d8
>     kasan_report+0x90/0xd0
>     __asan_store8+0x9c/0xc0
>           [btrtl]
>     h5_btrtl_setup+0xd0/0x2f8 [hci_uart]
>     h5_setup+0x50/0x80 [hci_uart]
>     hci_uart_setup+0xd4/0x260 [hci_uart]
>     hci_dev_open_sync+0x1cc/0xf68 [bluetooth]
>     hci_dev_do_open+0x34/0x90 [bluetooth]
>     hci_power_on+0xc4/0x3c8 [bluetooth]
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
> 
>   Allocated by task 53:
>     kasan_save_stack+0x3c/0x68
>     kasan_save_track+0x20/0x40
>     kasan_save_alloc_info+0x68/0x78
>     __kasan_kmalloc+0xd4/0xd8
>     __kmalloc+0x1b4/0x3b0
>     hci_alloc_dev_priv+0x28/0xa58 [bluetooth]
>     hci_uart_register_device+0x118/0x4f8 [hci_uart]
>     h5_serdev_probe+0xf4/0x178 [hci_uart]
>     serdev_drv_probe+0x54/0xa0
>     really_probe+0x254/0x588
>     __driver_probe_device+0xc4/0x210
>     driver_probe_device+0x64/0x160
>     __driver_attach_async_helper+0x88/0x158
>     async_run_entry_fn+0xd0/0x388
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
> 
>   Last potentially related work creation:
>     kasan_save_stack+0x3c/0x68
>     __kasan_record_aux_stack+0xb0/0x150
>     kasan_record_aux_stack_noalloc+0x14/0x20
>     __queue_work+0x33c/0x960
>     queue_work_on+0x98/0xc0
>     hci_recv_frame+0xc8/0x1e8 [bluetooth]
>     h5_complete_rx_pkt+0x2c8/0x800 [hci_uart]
>     h5_rx_payload+0x98/0xb8 [hci_uart]
>     h5_recv+0x158/0x3d8 [hci_uart]
>     hci_uart_receive_buf+0xa0/0xe8 [hci_uart]
>     ttyport_receive_buf+0xac/0x178
>     flush_to_ldisc+0x130/0x2c8
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
> 
>   Second to last potentially related work creation:
>     kasan_save_stack+0x3c/0x68
>     __kasan_record_aux_stack+0xb0/0x150
>     kasan_record_aux_stack_noalloc+0x14/0x20
>     __queue_work+0x788/0x960
>     queue_work_on+0x98/0xc0
>     __hci_cmd_sync_sk+0x23c/0x7a0 [bluetooth]
>     __hci_cmd_sync+0x24/0x38 [bluetooth]
>     btrtl_initialize+0x760/0x958 [btrtl]
>     h5_btrtl_setup+0xd0/0x2f8 [hci_uart]
>     h5_setup+0x50/0x80 [hci_uart]
>     hci_uart_setup+0xd4/0x260 [hci_uart]
>     hci_dev_open_sync+0x1cc/0xf68 [bluetooth]
>     hci_dev_do_open+0x34/0x90 [bluetooth]
>     hci_power_on+0xc4/0x3c8 [bluetooth]
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
> 
> [Fix]
> 
> Mantic:	Clean cherry-pick from prereq commit and linux-6.6.y
> Jammy:	not-affected
> Focal:	not-affected
> Bionic:	not-affected
> Xenial:	not-affected
> Trusty:	not-affected
> 
> [Test Case]
> 
> Compile and boot tested.
> 
> [Where problems could occur]
> 
> This fix affects those who use the bluetooth driver for Realtek
> devices, an issue with this fix would be visable to the user via
> data corruption, unpredicted system behavior, or a system crash.
> 
> Andrey Skvortsov (2):
>    Bluetooth: hci_h5: Add ability to allocate memory for private data
>    Bluetooth: btrtl: fix out of bounds memory access
> 
>   drivers/bluetooth/hci_h5.c     |  5 ++++-
>   drivers/bluetooth/hci_serdev.c |  9 +++++----
>   drivers/bluetooth/hci_uart.h   | 12 +++++++++++-
>   3 files changed, 20 insertions(+), 6 deletions(-)
> 

Acked-by: Stefan Bader <stefan.bader@canonical.com>
Tim Gardner May 13, 2024, 2:51 p.m. UTC | #2
On 5/1/24 01:18, Bethany Jamison wrote:
> [Impact]
> 
>   In the Linux kernel, the following vulnerability has been resolved:
> 
>   Bluetooth: btrtl: fix out of bounds memory access
> 
>   The problem is detected by KASAN.
>   btrtl driver uses private hci data to store 'struct btrealtek_data'.
>   If btrtl driver is used with btusb, then memory for private hci data
>   is allocated in btusb. But no private data is allocated after hci_dev,
>   when btrtl is used with hci_h5.
> 
>   This commit adds memory allocation for hci_h5 case.
> 
>    ==================================================================
>    BUG: KASAN: slab-out-of-bounds in btrtl_initialize+0x6cc/0x958 [btrtl]
>    Write of size 8 at addr ffff00000f5a5748 by task kworker/u9:0/76
> 
>    Hardware name: Pine64 PinePhone (1.2) (DT)
>    Workqueue: hci0 hci_power_on [bluetooth]
>    Call trace:
>     dump_backtrace+0x9c/0x128
>     show_stack+0x20/0x38
>     dump_stack_lvl+0x48/0x60
>     print_report+0xf8/0x5d8
>     kasan_report+0x90/0xd0
>     __asan_store8+0x9c/0xc0
>           [btrtl]
>     h5_btrtl_setup+0xd0/0x2f8 [hci_uart]
>     h5_setup+0x50/0x80 [hci_uart]
>     hci_uart_setup+0xd4/0x260 [hci_uart]
>     hci_dev_open_sync+0x1cc/0xf68 [bluetooth]
>     hci_dev_do_open+0x34/0x90 [bluetooth]
>     hci_power_on+0xc4/0x3c8 [bluetooth]
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
> 
>   Allocated by task 53:
>     kasan_save_stack+0x3c/0x68
>     kasan_save_track+0x20/0x40
>     kasan_save_alloc_info+0x68/0x78
>     __kasan_kmalloc+0xd4/0xd8
>     __kmalloc+0x1b4/0x3b0
>     hci_alloc_dev_priv+0x28/0xa58 [bluetooth]
>     hci_uart_register_device+0x118/0x4f8 [hci_uart]
>     h5_serdev_probe+0xf4/0x178 [hci_uart]
>     serdev_drv_probe+0x54/0xa0
>     really_probe+0x254/0x588
>     __driver_probe_device+0xc4/0x210
>     driver_probe_device+0x64/0x160
>     __driver_attach_async_helper+0x88/0x158
>     async_run_entry_fn+0xd0/0x388
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
> 
>   Last potentially related work creation:
>     kasan_save_stack+0x3c/0x68
>     __kasan_record_aux_stack+0xb0/0x150
>     kasan_record_aux_stack_noalloc+0x14/0x20
>     __queue_work+0x33c/0x960
>     queue_work_on+0x98/0xc0
>     hci_recv_frame+0xc8/0x1e8 [bluetooth]
>     h5_complete_rx_pkt+0x2c8/0x800 [hci_uart]
>     h5_rx_payload+0x98/0xb8 [hci_uart]
>     h5_recv+0x158/0x3d8 [hci_uart]
>     hci_uart_receive_buf+0xa0/0xe8 [hci_uart]
>     ttyport_receive_buf+0xac/0x178
>     flush_to_ldisc+0x130/0x2c8
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
> 
>   Second to last potentially related work creation:
>     kasan_save_stack+0x3c/0x68
>     __kasan_record_aux_stack+0xb0/0x150
>     kasan_record_aux_stack_noalloc+0x14/0x20
>     __queue_work+0x788/0x960
>     queue_work_on+0x98/0xc0
>     __hci_cmd_sync_sk+0x23c/0x7a0 [bluetooth]
>     __hci_cmd_sync+0x24/0x38 [bluetooth]
>     btrtl_initialize+0x760/0x958 [btrtl]
>     h5_btrtl_setup+0xd0/0x2f8 [hci_uart]
>     h5_setup+0x50/0x80 [hci_uart]
>     hci_uart_setup+0xd4/0x260 [hci_uart]
>     hci_dev_open_sync+0x1cc/0xf68 [bluetooth]
>     hci_dev_do_open+0x34/0x90 [bluetooth]
>     hci_power_on+0xc4/0x3c8 [bluetooth]
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
> 
> [Fix]
> 
> Mantic:	Clean cherry-pick from prereq commit and linux-6.6.y
> Jammy:	not-affected
> Focal:	not-affected
> Bionic:	not-affected
> Xenial:	not-affected
> Trusty:	not-affected
> 
> [Test Case]
> 
> Compile and boot tested.
> 
> [Where problems could occur]
> 
> This fix affects those who use the bluetooth driver for Realtek
> devices, an issue with this fix would be visable to the user via
> data corruption, unpredicted system behavior, or a system crash.
> 
> Andrey Skvortsov (2):
>    Bluetooth: hci_h5: Add ability to allocate memory for private data
>    Bluetooth: btrtl: fix out of bounds memory access
> 
>   drivers/bluetooth/hci_h5.c     |  5 ++++-
>   drivers/bluetooth/hci_serdev.c |  9 +++++----
>   drivers/bluetooth/hci_uart.h   | 12 +++++++++++-
>   3 files changed, 20 insertions(+), 6 deletions(-)
> 
Acked-by: Tim Gardner <tim.gardner@canonical.com>
Roxana Nicolescu May 24, 2024, 2:29 p.m. UTC | #3
On 01/05/2024 01:18, Bethany Jamison wrote:
> [Impact]
>
>   In the Linux kernel, the following vulnerability has been resolved:
>
>   Bluetooth: btrtl: fix out of bounds memory access
>
>   The problem is detected by KASAN.
>   btrtl driver uses private hci data to store 'struct btrealtek_data'.
>   If btrtl driver is used with btusb, then memory for private hci data
>   is allocated in btusb. But no private data is allocated after hci_dev,
>   when btrtl is used with hci_h5.
>
>   This commit adds memory allocation for hci_h5 case.
>
>    ==================================================================
>    BUG: KASAN: slab-out-of-bounds in btrtl_initialize+0x6cc/0x958 [btrtl]
>    Write of size 8 at addr ffff00000f5a5748 by task kworker/u9:0/76
>
>    Hardware name: Pine64 PinePhone (1.2) (DT)
>    Workqueue: hci0 hci_power_on [bluetooth]
>    Call trace:
>     dump_backtrace+0x9c/0x128
>     show_stack+0x20/0x38
>     dump_stack_lvl+0x48/0x60
>     print_report+0xf8/0x5d8
>     kasan_report+0x90/0xd0
>     __asan_store8+0x9c/0xc0
>           [btrtl]
>     h5_btrtl_setup+0xd0/0x2f8 [hci_uart]
>     h5_setup+0x50/0x80 [hci_uart]
>     hci_uart_setup+0xd4/0x260 [hci_uart]
>     hci_dev_open_sync+0x1cc/0xf68 [bluetooth]
>     hci_dev_do_open+0x34/0x90 [bluetooth]
>     hci_power_on+0xc4/0x3c8 [bluetooth]
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
>
>   Allocated by task 53:
>     kasan_save_stack+0x3c/0x68
>     kasan_save_track+0x20/0x40
>     kasan_save_alloc_info+0x68/0x78
>     __kasan_kmalloc+0xd4/0xd8
>     __kmalloc+0x1b4/0x3b0
>     hci_alloc_dev_priv+0x28/0xa58 [bluetooth]
>     hci_uart_register_device+0x118/0x4f8 [hci_uart]
>     h5_serdev_probe+0xf4/0x178 [hci_uart]
>     serdev_drv_probe+0x54/0xa0
>     really_probe+0x254/0x588
>     __driver_probe_device+0xc4/0x210
>     driver_probe_device+0x64/0x160
>     __driver_attach_async_helper+0x88/0x158
>     async_run_entry_fn+0xd0/0x388
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
>
>   Last potentially related work creation:
>     kasan_save_stack+0x3c/0x68
>     __kasan_record_aux_stack+0xb0/0x150
>     kasan_record_aux_stack_noalloc+0x14/0x20
>     __queue_work+0x33c/0x960
>     queue_work_on+0x98/0xc0
>     hci_recv_frame+0xc8/0x1e8 [bluetooth]
>     h5_complete_rx_pkt+0x2c8/0x800 [hci_uart]
>     h5_rx_payload+0x98/0xb8 [hci_uart]
>     h5_recv+0x158/0x3d8 [hci_uart]
>     hci_uart_receive_buf+0xa0/0xe8 [hci_uart]
>     ttyport_receive_buf+0xac/0x178
>     flush_to_ldisc+0x130/0x2c8
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
>
>   Second to last potentially related work creation:
>     kasan_save_stack+0x3c/0x68
>     __kasan_record_aux_stack+0xb0/0x150
>     kasan_record_aux_stack_noalloc+0x14/0x20
>     __queue_work+0x788/0x960
>     queue_work_on+0x98/0xc0
>     __hci_cmd_sync_sk+0x23c/0x7a0 [bluetooth]
>     __hci_cmd_sync+0x24/0x38 [bluetooth]
>     btrtl_initialize+0x760/0x958 [btrtl]
>     h5_btrtl_setup+0xd0/0x2f8 [hci_uart]
>     h5_setup+0x50/0x80 [hci_uart]
>     hci_uart_setup+0xd4/0x260 [hci_uart]
>     hci_dev_open_sync+0x1cc/0xf68 [bluetooth]
>     hci_dev_do_open+0x34/0x90 [bluetooth]
>     hci_power_on+0xc4/0x3c8 [bluetooth]
>     process_one_work+0x328/0x6f0
>     worker_thread+0x410/0x778
>     kthread+0x168/0x178
>     ret_from_fork+0x10/0x20
>
> [Fix]
>
> Mantic:	Clean cherry-pick from prereq commit and linux-6.6.y
> Jammy:	not-affected
> Focal:	not-affected
> Bionic:	not-affected
> Xenial:	not-affected
> Trusty:	not-affected
>
> [Test Case]
>
> Compile and boot tested.
>
> [Where problems could occur]
>
> This fix affects those who use the bluetooth driver for Realtek
> devices, an issue with this fix would be visable to the user via
> data corruption, unpredicted system behavior, or a system crash.
>
> Andrey Skvortsov (2):
>    Bluetooth: hci_h5: Add ability to allocate memory for private data
>    Bluetooth: btrtl: fix out of bounds memory access
>
>   drivers/bluetooth/hci_h5.c     |  5 ++++-
>   drivers/bluetooth/hci_serdev.c |  9 +++++----
>   drivers/bluetooth/hci_uart.h   | 12 +++++++++++-
>   3 files changed, 20 insertions(+), 6 deletions(-)
>
Applied to mantic:linux master-next branch. Thanks!