1. 15 8月, 2023 5 次提交
  2. 14 8月, 2023 22 次提交
  3. 10 8月, 2023 1 次提交
    • L
      xfrm: add NULL check in xfrm_update_ae_params · 73f660ad
      Lin Ma 提交于
      mainline inclusion
      from mainline-v6.5-rc3
      commit 00374d9b6d9f932802b55181be9831aa948e5b7c
      category: bugfix
      bugzilla: https://gitee.com/src-openeuler/kernel/issues/I7NYWN
      CVE: CVE-2023-3772
      
      Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=00374d9b6d9f932802b55181be9831aa948e5b7c
      
      --------------------------------
      
      Normally, x->replay_esn and x->preplay_esn should be allocated at
      xfrm_alloc_replay_state_esn(...) in xfrm_state_construct(...), hence the
      xfrm_update_ae_params(...) is okay to update them. However, the current
      implementation of xfrm_new_ae(...) allows a malicious user to directly
      dereference a NULL pointer and crash the kernel like below.
      
      BUG: kernel NULL pointer dereference, address: 0000000000000000
      PGD 8253067 P4D 8253067 PUD 8e0e067 PMD 0
      Oops: 0002 [#1] PREEMPT SMP KASAN NOPTI
      CPU: 0 PID: 98 Comm: poc.npd Not tainted 6.4.0-rc7-00072-gdad9774d #8
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.16.0-0-gd239552ce722-prebuilt.qemu.o4
      RIP: 0010:memcpy_orig+0xad/0x140
      Code: e8 4c 89 5f e0 48 8d 7f e0 73 d2 83 c2 20 48 29 d6 48 29 d7 83 fa 10 72 34 4c 8b 06 4c 8b 4e 08 c
      RSP: 0018:ffff888008f57658 EFLAGS: 00000202
      RAX: 0000000000000000 RBX: ffff888008bd0000 RCX: ffffffff8238e571
      RDX: 0000000000000018 RSI: ffff888007f64844 RDI: 0000000000000000
      RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000000 R12: ffff888008f57818
      R13: ffff888007f64aa4 R14: 0000000000000000 R15: 0000000000000000
      FS:  00000000014013c0(0000) GS:ffff88806d600000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000000 CR3: 00000000054d8000 CR4: 00000000000006f0
      Call Trace:
       <TASK>
       ? __die+0x1f/0x70
       ? page_fault_oops+0x1e8/0x500
       ? __pfx_is_prefetch.constprop.0+0x10/0x10
       ? __pfx_page_fault_oops+0x10/0x10
       ? _raw_spin_unlock_irqrestore+0x11/0x40
       ? fixup_exception+0x36/0x460
       ? _raw_spin_unlock_irqrestore+0x11/0x40
       ? exc_page_fault+0x5e/0xc0
       ? asm_exc_page_fault+0x26/0x30
       ? xfrm_update_ae_params+0xd1/0x260
       ? memcpy_orig+0xad/0x140
       ? __pfx__raw_spin_lock_bh+0x10/0x10
       xfrm_update_ae_params+0xe7/0x260
       xfrm_new_ae+0x298/0x4e0
       ? __pfx_xfrm_new_ae+0x10/0x10
       ? __pfx_xfrm_new_ae+0x10/0x10
       xfrm_user_rcv_msg+0x25a/0x410
       ? __pfx_xfrm_user_rcv_msg+0x10/0x10
       ? __alloc_skb+0xcf/0x210
       ? stack_trace_save+0x90/0xd0
       ? filter_irq_stacks+0x1c/0x70
       ? __stack_depot_save+0x39/0x4e0
       ? __kasan_slab_free+0x10a/0x190
       ? kmem_cache_free+0x9c/0x340
       ? netlink_recvmsg+0x23c/0x660
       ? sock_recvmsg+0xeb/0xf0
       ? __sys_recvfrom+0x13c/0x1f0
       ? __x64_sys_recvfrom+0x71/0x90
       ? do_syscall_64+0x3f/0x90
       ? entry_SYSCALL_64_after_hwframe+0x72/0xdc
       ? copyout+0x3e/0x50
       netlink_rcv_skb+0xd6/0x210
       ? __pfx_xfrm_user_rcv_msg+0x10/0x10
       ? __pfx_netlink_rcv_skb+0x10/0x10
       ? __pfx_sock_has_perm+0x10/0x10
       ? mutex_lock+0x8d/0xe0
       ? __pfx_mutex_lock+0x10/0x10
       xfrm_netlink_rcv+0x44/0x50
       netlink_unicast+0x36f/0x4c0
       ? __pfx_netlink_unicast+0x10/0x10
       ? netlink_recvmsg+0x500/0x660
       netlink_sendmsg+0x3b7/0x700
      
      This Null-ptr-deref bug is assigned CVE-2023-3772. And this commit
      adds additional NULL check in xfrm_update_ae_params to fix the NPD.
      
      Fixes: d8647b79 ("xfrm: Add user interface for esn and big anti-replay windows")
      Signed-off-by: NLin Ma <linma@zju.edu.cn>
      Reviewed-by: NLeon Romanovsky <leonro@nvidia.com>
      Signed-off-by: NSteffen Klassert <steffen.klassert@secunet.com>
      
      Conflicts:
      	net/xfrm/xfrm_user.c
      Signed-off-by: NZhengchao Shao <shaozhengchao@huawei.com>
      (cherry picked from commit 5bfbef90)
      73f660ad
  4. 09 8月, 2023 2 次提交
  5. 08 8月, 2023 3 次提交
  6. 07 8月, 2023 3 次提交
    • N
      ksmbd: fix out-of-bound read in deassemble_neg_contexts() · 4dfb1cd1
      Namjae Jeon 提交于
      mainline inclusion
      from mainline-v6.4-rc6
      commit f1a41187
      category: bugfix
      bugzilla: https://gitee.com/src-openeuler/kernel/issues/I7LU2Q
      CVE: CVE-2023-38427
      
      Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/fs/smb/server?id=f1a411873c85b642f13b01f21b534c2bab81fc1b
      
      --------------------------------
      
      The check in the beginning is
      `clen + sizeof(struct smb2_neg_context) <= len_of_ctxts`,
      but in the end of loop, `len_of_ctxts` will subtract
      `((clen + 7) & ~0x7) + sizeof(struct smb2_neg_context)`, which causes
      integer underflow when clen does the 8 alignment. We should use
      `(clen + 7) & ~0x7` in the check to avoid underflow from happening.
      
      Then there are some variables that need to be declared unsigned
      instead of signed.
      
      [   11.671070] BUG: KASAN: slab-out-of-bounds in smb2_handle_negotiate+0x799/0x1610
      [   11.671533] Read of size 2 at addr ffff888005e86cf2 by task kworker/0:0/7
      ...
      [   11.673383] Call Trace:
      [   11.673541]  <TASK>
      [   11.673679]  dump_stack_lvl+0x33/0x50
      [   11.673913]  print_report+0xcc/0x620
      [   11.674671]  kasan_report+0xae/0xe0
      [   11.675171]  kasan_check_range+0x35/0x1b0
      [   11.675412]  smb2_handle_negotiate+0x799/0x1610
      [   11.676217]  ksmbd_smb_negotiate_common+0x526/0x770
      [   11.676795]  handle_ksmbd_work+0x274/0x810
      ...
      
      Cc: stable@vger.kernel.org
      Signed-off-by: NChih-Yen Chang <cc85nod@gmail.com>
      Tested-by: NChih-Yen Chang <cc85nod@gmail.com>
      Signed-off-by: NNamjae Jeon <linkinjeon@kernel.org>
      Signed-off-by: NSteve French <stfrench@microsoft.com>
      
      Conflict:
        fs/smb/server/smb2pdu.c
      Signed-off-by: NLi Lingfeng <lilingfeng3@huawei.com>
      (cherry picked from commit 5df19222)
      4dfb1cd1
    • D
      media: usb: siano: Fix warning due to null work_func_t function pointer · 98c8030b
      Duoming Zhou 提交于
      mainline inclusion
      from mainline-v6.5-rc1
      commit 6f489a966fbeb0da63d45c2c66a8957eab604bf6
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I7QTMZ
      CVE: CVE-2023-4132
      
      Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6f489a966fbeb0da63d45c2c66a8957eab604bf6
      
      --------------------------------
      
      The previous commit ebad8e73 ("media: usb: siano: Fix use after
      free bugs caused by do_submit_urb") adds cancel_work_sync() in
      smsusb_stop_streaming(). But smsusb_stop_streaming() may be called,
      even if the work_struct surb->wq has not been initialized. As a result,
      the warning will occur. One of the processes that could lead to warning
      is shown below:
      
      smsusb_probe()
        smsusb_init_device()
          if (!dev->in_ep || !dev->out_ep || align < 0) {
               smsusb_term_device(intf);
                 smsusb_stop_streaming()
                   cancel_work_sync(&dev->surbs[i].wq);
                     __cancel_work_timer()
                       __flush_work()
                         if (WARN_ON(!work->func)) // work->func is null
      
      The log reported by syzbot is shown below:
      
      WARNING: CPU: 0 PID: 897 at kernel/workqueue.c:3066 __flush_work+0x798/0xa80 kernel/workqueue.c:3063
      Modules linked in:
      CPU: 0 PID: 897 Comm: kworker/0:2 Not tainted 6.2.0-rc1-syzkaller #0
      RIP: 0010:__flush_work+0x798/0xa80 kernel/workqueue.c:3066
      ...
      RSP: 0018:ffffc9000464ebf8 EFLAGS: 00010246
      RAX: 1ffff11002dbb420 RBX: 0000000000000021 RCX: 1ffffffff204fa4e
      RDX: dffffc0000000000 RSI: 0000000000000001 RDI: ffff888016dda0e8
      RBP: ffffc9000464ed98 R08: 0000000000000001 R09: ffffffff90253b2f
      R10: 0000000000000001 R11: 0000000000000000 R12: ffff888016dda0e8
      R13: ffff888016dda0e8 R14: ffff888016dda100 R15: 0000000000000001
      FS:  0000000000000000(0000) GS:ffff8880b9a00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007ffd4331efe8 CR3: 000000000b48e000 CR4: 00000000003506f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       <TASK>
       __cancel_work_timer+0x315/0x460 kernel/workqueue.c:3160
       smsusb_stop_streaming drivers/media/usb/siano/smsusb.c:182 [inline]
       smsusb_term_device+0xda/0x2d0 drivers/media/usb/siano/smsusb.c:344
       smsusb_init_device+0x400/0x9ce drivers/media/usb/siano/smsusb.c:419
       smsusb_probe+0xbbd/0xc55 drivers/media/usb/siano/smsusb.c:567
      ...
      
      This patch adds check before cancel_work_sync(). If surb->wq has not
      been initialized, the cancel_work_sync() will not be executed.
      
      Reported-by: syzbot+27b0b464864741b18b99@syzkaller.appspotmail.com
      Fixes: ebad8e73 ("media: usb: siano: Fix use after free bugs caused by do_submit_urb")
      Signed-off-by: NDuoming Zhou <duoming@zju.edu.cn>
      Signed-off-by: NHans Verkuil <hverkuil-cisco@xs4all.nl>
      Signed-off-by: NRuan Jinjie <ruanjinjie@huawei.com>
      (cherry picked from commit d6a3c21a)
      98c8030b
    • D
      media: usb: siano: Fix use after free bugs caused by do_submit_urb · f96dda11
      Duoming Zhou 提交于
      mainline inclusion
      from mainline-v6.3-rc1
      commit ebad8e73
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I7QTMZ
      CVE: CVE-2023-4132
      
      Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ebad8e731c1c06adf04621d6fd327b860c0861b5
      
      --------------------------------
      
      There are UAF bugs caused by do_submit_urb(). One of the KASan reports
      is shown below:
      
      [   36.403605] BUG: KASAN: use-after-free in worker_thread+0x4a2/0x890
      [   36.406105] Read of size 8 at addr ffff8880059600e8 by task kworker/0:2/49
      [   36.408316]
      [   36.408867] CPU: 0 PID: 49 Comm: kworker/0:2 Not tainted 6.2.0-rc3-15798-g5a41237a-dir8
      [   36.411696] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g15584
      [   36.416157] Workqueue:  0x0 (events)
      [   36.417654] Call Trace:
      [   36.418546]  <TASK>
      [   36.419320]  dump_stack_lvl+0x96/0xd0
      [   36.420522]  print_address_description+0x75/0x350
      [   36.421992]  print_report+0x11b/0x250
      [   36.423174]  ? _raw_spin_lock_irqsave+0x87/0xd0
      [   36.424806]  ? __virt_addr_valid+0xcf/0x170
      [   36.426069]  ? worker_thread+0x4a2/0x890
      [   36.427355]  kasan_report+0x131/0x160
      [   36.428556]  ? worker_thread+0x4a2/0x890
      [   36.430053]  worker_thread+0x4a2/0x890
      [   36.431297]  ? worker_clr_flags+0x90/0x90
      [   36.432479]  kthread+0x166/0x190
      [   36.433493]  ? kthread_blkcg+0x50/0x50
      [   36.434669]  ret_from_fork+0x22/0x30
      [   36.435923]  </TASK>
      [   36.436684]
      [   36.437215] Allocated by task 24:
      [   36.438289]  kasan_set_track+0x50/0x80
      [   36.439436]  __kasan_kmalloc+0x89/0xa0
      [   36.440566]  smsusb_probe+0x374/0xc90
      [   36.441920]  usb_probe_interface+0x2d1/0x4c0
      [   36.443253]  really_probe+0x1d5/0x580
      [   36.444539]  __driver_probe_device+0xe3/0x130
      [   36.446085]  driver_probe_device+0x49/0x220
      [   36.447423]  __device_attach_driver+0x19e/0x1b0
      [   36.448931]  bus_for_each_drv+0xcb/0x110
      [   36.450217]  __device_attach+0x132/0x1f0
      [   36.451470]  bus_probe_device+0x59/0xf0
      [   36.452563]  device_add+0x4ec/0x7b0
      [   36.453830]  usb_set_configuration+0xc63/0xe10
      [   36.455230]  usb_generic_driver_probe+0x3b/0x80
      [   36.456166] printk: console [ttyGS0] disabled
      [   36.456569]  usb_probe_device+0x90/0x110
      [   36.459523]  really_probe+0x1d5/0x580
      [   36.461027]  __driver_probe_device+0xe3/0x130
      [   36.462465]  driver_probe_device+0x49/0x220
      [   36.463847]  __device_attach_driver+0x19e/0x1b0
      [   36.465229]  bus_for_each_drv+0xcb/0x110
      [   36.466466]  __device_attach+0x132/0x1f0
      [   36.467799]  bus_probe_device+0x59/0xf0
      [   36.469010]  device_add+0x4ec/0x7b0
      [   36.470125]  usb_new_device+0x863/0xa00
      [   36.471374]  hub_event+0x18c7/0x2220
      [   36.472746]  process_one_work+0x34c/0x5b0
      [   36.474041]  worker_thread+0x4b7/0x890
      [   36.475216]  kthread+0x166/0x190
      [   36.476267]  ret_from_fork+0x22/0x30
      [   36.477447]
      [   36.478160] Freed by task 24:
      [   36.479239]  kasan_set_track+0x50/0x80
      [   36.480512]  kasan_save_free_info+0x2b/0x40
      [   36.481808]  ____kasan_slab_free+0x122/0x1a0
      [   36.483173]  __kmem_cache_free+0xc4/0x200
      [   36.484563]  smsusb_term_device+0xcd/0xf0
      [   36.485896]  smsusb_probe+0xc85/0xc90
      [   36.486976]  usb_probe_interface+0x2d1/0x4c0
      [   36.488303]  really_probe+0x1d5/0x580
      [   36.489498]  __driver_probe_device+0xe3/0x130
      [   36.491140]  driver_probe_device+0x49/0x220
      [   36.492475]  __device_attach_driver+0x19e/0x1b0
      [   36.493988]  bus_for_each_drv+0xcb/0x110
      [   36.495171]  __device_attach+0x132/0x1f0
      [   36.496617]  bus_probe_device+0x59/0xf0
      [   36.497875]  device_add+0x4ec/0x7b0
      [   36.498972]  usb_set_configuration+0xc63/0xe10
      [   36.500264]  usb_generic_driver_probe+0x3b/0x80
      [   36.501740]  usb_probe_device+0x90/0x110
      [   36.503084]  really_probe+0x1d5/0x580
      [   36.504241]  __driver_probe_device+0xe3/0x130
      [   36.505548]  driver_probe_device+0x49/0x220
      [   36.506766]  __device_attach_driver+0x19e/0x1b0
      [   36.508368]  bus_for_each_drv+0xcb/0x110
      [   36.509646]  __device_attach+0x132/0x1f0
      [   36.510911]  bus_probe_device+0x59/0xf0
      [   36.512103]  device_add+0x4ec/0x7b0
      [   36.513215]  usb_new_device+0x863/0xa00
      [   36.514736]  hub_event+0x18c7/0x2220
      [   36.516130]  process_one_work+0x34c/0x5b0
      [   36.517396]  worker_thread+0x4b7/0x890
      [   36.518591]  kthread+0x166/0x190
      [   36.519599]  ret_from_fork+0x22/0x30
      [   36.520851]
      [   36.521405] Last potentially related work creation:
      [   36.523143]  kasan_save_stack+0x3f/0x60
      [   36.524275]  kasan_record_aux_stack_noalloc+0x9d/0xb0
      [   36.525831]  insert_work+0x25/0x130
      [   36.527039]  __queue_work+0x4d4/0x620
      [   36.528236]  queue_work_on+0x72/0xb0
      [   36.529344]  __usb_hcd_giveback_urb+0x13f/0x1b0
      [   36.530819]  dummy_timer+0x350/0x1a40
      [   36.532149]  call_timer_fn+0x2c/0x190
      [   36.533567]  expire_timers+0x69/0x1f0
      [   36.534736]  __run_timers+0x289/0x2d0
      [   36.535841]  run_timer_softirq+0x2d/0x60
      [   36.537110]  __do_softirq+0x116/0x380
      [   36.538377]
      [   36.538950] Second to last potentially related work creation:
      [   36.540855]  kasan_save_stack+0x3f/0x60
      [   36.542084]  kasan_record_aux_stack_noalloc+0x9d/0xb0
      [   36.543592]  insert_work+0x25/0x130
      [   36.544891]  __queue_work+0x4d4/0x620
      [   36.546168]  queue_work_on+0x72/0xb0
      [   36.547328]  __usb_hcd_giveback_urb+0x13f/0x1b0
      [   36.548805]  dummy_timer+0x350/0x1a40
      [   36.550116]  call_timer_fn+0x2c/0x190
      [   36.551570]  expire_timers+0x69/0x1f0
      [   36.552762]  __run_timers+0x289/0x2d0
      [   36.553916]  run_timer_softirq+0x2d/0x60
      [   36.555118]  __do_softirq+0x116/0x380
      [   36.556239]
      [   36.556807] The buggy address belongs to the object at ffff888005960000
      [   36.556807]  which belongs to the cache kmalloc-4k of size 4096
      [   36.560652] The buggy address is located 232 bytes inside of
      [   36.560652]  4096-byte region [ffff888005960000, ffff888005961000)
      [   36.564791]
      [   36.565355] The buggy address belongs to the physical page:
      [   36.567212] page:000000004f0a0731 refcount:1 mapcount:0 mapping:0000000000000000 index:0x00
      [   36.570534] head:000000004f0a0731 order:3 compound_mapcount:0 subpages_mapcount:0 compound0
      [   36.573717] flags: 0x100000000010200(slab|head|node=0|zone=1)
      [   36.575481] raw: 0100000000010200 ffff888001042140 dead000000000122 0000000000000000
      [   36.577842] raw: 0000000000000000 0000000000040004 00000001ffffffff 0000000000000000
      [   36.580175] page dumped because: kasan: bad access detected
      [   36.581994]
      [   36.582548] Memory state around the buggy address:
      [   36.583983]  ffff88800595ff80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      [   36.586240]  ffff888005960000: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   36.588884] >ffff888005960080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   36.591071]                                                           ^
      [   36.593295]  ffff888005960100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   36.595705]  ffff888005960180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      [   36.598026] ==================================================================
      [   36.600224] Disabling lock debugging due to kernel taint
      [   36.602681] general protection fault, probably for non-canonical address 0x43600a000000060I
      [   36.607129] CPU: 0 PID: 49 Comm: kworker/0:2 Tainted: G    B              6.2.0-rc3-15798-8
      [   36.611115] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.14.0-0-g15584
      [   36.615026] Workqueue: events do_submit_urb
      [   36.616290] RIP: 0010:_raw_spin_lock_irqsave+0x8a/0xd0
      [   36.618107] Code: 24 00 00 00 00 48 89 df be 04 00 00 00 e8 9e b5 c6 fe 48 89 ef be 04 00 5
      [   36.623522] RSP: 0018:ffff888004b6fcf0 EFLAGS: 00010046
      [   36.625072] RAX: 0000000000000000 RBX: 043600a000000060 RCX: ffffffff9fc0e0d7
      [   36.627206] RDX: 0000000000000000 RSI: dffffc0000000000 RDI: ffff888004b6fcf0
      [   36.629813] RBP: ffff888004b6fcf0 R08: dffffc0000000000 R09: ffffed100096df9f
      [   36.631974] R10: dfffe9100096dfa0 R11: 1ffff1100096df9e R12: ffff888005960020
      [   36.634285] R13: ffff8880059600f0 R14: 0000000000000246 R15: 0000000000000001
      [   36.636438] FS:  0000000000000000(0000) GS:ffff88806d600000(0000) knlGS:0000000000000000
      [   36.639092] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   36.640951] CR2: 00007f07476819a3 CR3: 0000000004a34000 CR4: 00000000000006f0
      [   36.643411] Call Trace:
      [   36.644215]  <TASK>
      [   36.644902]  smscore_getbuffer+0x3e/0x1e0
      [   36.646147]  do_submit_urb+0x4f/0x190
      [   36.647449]  process_one_work+0x34c/0x5b0
      [   36.648777]  worker_thread+0x4b7/0x890
      [   36.649984]  ? worker_clr_flags+0x90/0x90
      [   36.651166]  kthread+0x166/0x190
      [   36.652151]  ? kthread_blkcg+0x50/0x50
      [   36.653547]  ret_from_fork+0x22/0x30
      [   36.655051]  </TASK>
      [   36.655733] Modules linked in:
      [   36.656787] ---[ end trace 0000000000000000 ]---
      [   36.658328] RIP: 0010:_raw_spin_lock_irqsave+0x8a/0xd0
      [   36.660045] Code: 24 00 00 00 00 48 89 df be 04 00 00 00 e8 9e b5 c6 fe 48 89 ef be 04 00 5
      [   36.665730] RSP: 0018:ffff888004b6fcf0 EFLAGS: 00010046
      [   36.667448] RAX: 0000000000000000 RBX: 043600a000000060 RCX: ffffffff9fc0e0d7
      [   36.669675] RDX: 0000000000000000 RSI: dffffc0000000000 RDI: ffff888004b6fcf0
      [   36.672645] RBP: ffff888004b6fcf0 R08: dffffc0000000000 R09: ffffed100096df9f
      [   36.674921] R10: dfffe9100096dfa0 R11: 1ffff1100096df9e R12: ffff888005960020
      [   36.677034] R13: ffff8880059600f0 R14: 0000000000000246 R15: 0000000000000001
      [   36.679184] FS:  0000000000000000(0000) GS:ffff88806d600000(0000) knlGS:0000000000000000
      [   36.681655] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [   36.683383] CR2: 00007f07476819a3 CR3: 0000000004a34000 CR4: 00000000000006f0
      [   36.685733] Kernel panic - not syncing: Fatal exception
      [   36.688585] Kernel Offset: 0x1d400000 from 0xffffffff81000000 (relocation range: 0xfffffff)
      [   36.692199] ---[ end Kernel panic - not syncing: Fatal exception ]---
      
      When the siano device is plugged in, it may call the following functions
      to initialize the device.
      
      smsusb_probe()-->smsusb_init_device()-->smscore_start_device().
      
      When smscore_start_device() gets failed, the function smsusb_term_device()
      will be called and smsusb_device_t will be deallocated. Although we use
      usb_kill_urb() in smsusb_stop_streaming() to cancel transfer requests
      and wait for them to finish, the worker threads that are scheduled by
      smsusb_onresponse() may be still running. As a result, the UAF bugs
      could happen.
      
      We add cancel_work_sync() in smsusb_stop_streaming() in order that the
      worker threads could finish before the smsusb_device_t is deallocated.
      
      Fixes: dd47fbd4 ("[media] smsusb: don't sleep while atomic")
      Signed-off-by: NDuoming Zhou <duoming@zju.edu.cn>
      Signed-off-by: NHans Verkuil <hverkuil-cisco@xs4all.nl>
      Signed-off-by: NMauro Carvalho Chehab <mchehab@kernel.org>
      Signed-off-by: NRuan Jinjie <ruanjinjie@huawei.com>
      (cherry picked from commit a6fbd041)
      f96dda11
  7. 04 8月, 2023 4 次提交