1. 15 8月, 2023 2 次提交
  2. 14 8月, 2023 21 次提交
  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 5 次提交
  8. 03 8月, 2023 3 次提交
    • L
      net: nfc: Fix use-after-free caused by nfc_llcp_find_local · b7dafa7b
      Lin Ma 提交于
      stable inclusion
      from stable-v5.10.188
      commit 96f2c6f272ec04083d828de46285a7d7b17d1aad
      category: bugfix
      bugzilla: https://gitee.com/src-openeuler/kernel/issues/I7NLJR
      CVE: CVE-2023-3863
      
      Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=96f2c6f272ec04083d828de46285a7d7b17d1aad
      
      ---------------------------
      
      [ Upstream commit 6709d4b7bc2e079241fdef15d1160581c5261c10 ]
      
      This commit fixes several use-after-free that caused by function
      nfc_llcp_find_local(). For example, one UAF can happen when below buggy
      time window occurs.
      
      // nfc_genl_llc_get_params   | // nfc_unregister_device
                                   |
      dev = nfc_get_device(idx);   | device_lock(...)
      if (!dev)                    | dev->shutting_down = true;
          return -ENODEV;          | device_unlock(...);
                                   |
      device_lock(...);            |   // nfc_llcp_unregister_device
                                   |   nfc_llcp_find_local()
      nfc_llcp_find_local(...);    |
                                   |   local_cleanup()
      if (!local) {                |
          rc = -ENODEV;            |     // nfc_llcp_local_put
          goto exit;               |     kref_put(.., local_release)
      }                            |
                                   |       // local_release
                                   |       list_del(&local->list)
        // nfc_genl_send_params    |       kfree()
        local->dev->idx !!!UAF!!!  |
                                   |
      
      and the crash trace for the one of the discussed UAF like:
      
      BUG: KASAN: slab-use-after-free in nfc_genl_llc_get_params+0x72f/0x780  net/nfc/netlink.c:1045
      Read of size 8 at addr ffff888105b0e410 by task 20114
      
      Call Trace:
       <TASK>
       __dump_stack  lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0x72/0xa0  lib/dump_stack.c:106
       print_address_description  mm/kasan/report.c:319 [inline]
       print_report+0xcc/0x620  mm/kasan/report.c:430
       kasan_report+0xb2/0xe0  mm/kasan/report.c:536
       nfc_genl_send_params  net/nfc/netlink.c:999 [inline]
       nfc_genl_llc_get_params+0x72f/0x780  net/nfc/netlink.c:1045
       genl_family_rcv_msg_doit.isra.0+0x1ee/0x2e0  net/netlink/genetlink.c:968
       genl_family_rcv_msg  net/netlink/genetlink.c:1048 [inline]
       genl_rcv_msg+0x503/0x7d0  net/netlink/genetlink.c:1065
       netlink_rcv_skb+0x161/0x430  net/netlink/af_netlink.c:2548
       genl_rcv+0x28/0x40  net/netlink/genetlink.c:1076
       netlink_unicast_kernel  net/netlink/af_netlink.c:1339 [inline]
       netlink_unicast+0x644/0x900  net/netlink/af_netlink.c:1365
       netlink_sendmsg+0x934/0xe70  net/netlink/af_netlink.c:1913
       sock_sendmsg_nosec  net/socket.c:724 [inline]
       sock_sendmsg+0x1b6/0x200  net/socket.c:747
       ____sys_sendmsg+0x6e9/0x890  net/socket.c:2501
       ___sys_sendmsg+0x110/0x1b0  net/socket.c:2555
       __sys_sendmsg+0xf7/0x1d0  net/socket.c:2584
       do_syscall_x64  arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x3f/0x90  arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
      RIP: 0033:0x7f34640a2389
      RSP: 002b:00007f3463415168 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
      RAX: ffffffffffffffda RBX: 00007f34641c1f80 RCX: 00007f34640a2389
      RDX: 0000000000000000 RSI: 0000000020000240 RDI: 0000000000000006
      RBP: 00007f34640ed493 R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
      R13: 00007ffe38449ecf R14: 00007f3463415300 R15: 0000000000022000
       </TASK>
      
      Allocated by task 20116:
       kasan_save_stack+0x22/0x50  mm/kasan/common.c:45
       kasan_set_track+0x25/0x30  mm/kasan/common.c:52
       ____kasan_kmalloc  mm/kasan/common.c:374 [inline]
       __kasan_kmalloc+0x7f/0x90  mm/kasan/common.c:383
       kmalloc  include/linux/slab.h:580 [inline]
       kzalloc  include/linux/slab.h:720 [inline]
       nfc_llcp_register_device+0x49/0xa40  net/nfc/llcp_core.c:1567
       nfc_register_device+0x61/0x260  net/nfc/core.c:1124
       nci_register_device+0x776/0xb20  net/nfc/nci/core.c:1257
       virtual_ncidev_open+0x147/0x230  drivers/nfc/virtual_ncidev.c:148
       misc_open+0x379/0x4a0  drivers/char/misc.c:165
       chrdev_open+0x26c/0x780  fs/char_dev.c:414
       do_dentry_open+0x6c4/0x12a0  fs/open.c:920
       do_open  fs/namei.c:3560 [inline]
       path_openat+0x24fe/0x37e0  fs/namei.c:3715
       do_filp_open+0x1ba/0x410  fs/namei.c:3742
       do_sys_openat2+0x171/0x4c0  fs/open.c:1356
       do_sys_open  fs/open.c:1372 [inline]
       __do_sys_openat  fs/open.c:1388 [inline]
       __se_sys_openat  fs/open.c:1383 [inline]
       __x64_sys_openat+0x143/0x200  fs/open.c:1383
       do_syscall_x64  arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x3f/0x90  arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
      
      Freed by task 20115:
       kasan_save_stack+0x22/0x50  mm/kasan/common.c:45
       kasan_set_track+0x25/0x30  mm/kasan/common.c:52
       kasan_save_free_info+0x2e/0x50  mm/kasan/generic.c:521
       ____kasan_slab_free  mm/kasan/common.c:236 [inline]
       ____kasan_slab_free  mm/kasan/common.c:200 [inline]
       __kasan_slab_free+0x10a/0x190  mm/kasan/common.c:244
       kasan_slab_free  include/linux/kasan.h:162 [inline]
       slab_free_hook  mm/slub.c:1781 [inline]
       slab_free_freelist_hook  mm/slub.c:1807 [inline]
       slab_free  mm/slub.c:3787 [inline]
       __kmem_cache_free+0x7a/0x190  mm/slub.c:3800
       local_release  net/nfc/llcp_core.c:174 [inline]
       kref_put  include/linux/kref.h:65 [inline]
       nfc_llcp_local_put  net/nfc/llcp_core.c:182 [inline]
       nfc_llcp_local_put  net/nfc/llcp_core.c:177 [inline]
       nfc_llcp_unregister_device+0x206/0x290  net/nfc/llcp_core.c:1620
       nfc_unregister_device+0x160/0x1d0  net/nfc/core.c:1179
       virtual_ncidev_close+0x52/0xa0  drivers/nfc/virtual_ncidev.c:163
       __fput+0x252/0xa20  fs/file_table.c:321
       task_work_run+0x174/0x270  kernel/task_work.c:179
       resume_user_mode_work  include/linux/resume_user_mode.h:49 [inline]
       exit_to_user_mode_loop  kernel/entry/common.c:171 [inline]
       exit_to_user_mode_prepare+0x108/0x110  kernel/entry/common.c:204
       __syscall_exit_to_user_mode_work  kernel/entry/common.c:286 [inline]
       syscall_exit_to_user_mode+0x21/0x50  kernel/entry/common.c:297
       do_syscall_64+0x4c/0x90  arch/x86/entry/common.c:86
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
      
      Last potentially related work creation:
       kasan_save_stack+0x22/0x50  mm/kasan/common.c:45
       __kasan_record_aux_stack+0x95/0xb0  mm/kasan/generic.c:491
       kvfree_call_rcu+0x29/0xa80  kernel/rcu/tree.c:3328
       drop_sysctl_table+0x3be/0x4e0  fs/proc/proc_sysctl.c:1735
       unregister_sysctl_table.part.0+0x9c/0x190  fs/proc/proc_sysctl.c:1773
       unregister_sysctl_table+0x24/0x30  fs/proc/proc_sysctl.c:1753
       neigh_sysctl_unregister+0x5f/0x80  net/core/neighbour.c:3895
       addrconf_notify+0x140/0x17b0  net/ipv6/addrconf.c:3684
       notifier_call_chain+0xbe/0x210  kernel/notifier.c:87
       call_netdevice_notifiers_info+0xb5/0x150  net/core/dev.c:1937
       call_netdevice_notifiers_extack  net/core/dev.c:1975 [inline]
       call_netdevice_notifiers  net/core/dev.c:1989 [inline]
       dev_change_name+0x3c3/0x870  net/core/dev.c:1211
       dev_ifsioc+0x800/0xf70  net/core/dev_ioctl.c:376
       dev_ioctl+0x3d9/0xf80  net/core/dev_ioctl.c:542
       sock_do_ioctl+0x160/0x260  net/socket.c:1213
       sock_ioctl+0x3f9/0x670  net/socket.c:1316
       vfs_ioctl  fs/ioctl.c:51 [inline]
       __do_sys_ioctl  fs/ioctl.c:870 [inline]
       __se_sys_ioctl  fs/ioctl.c:856 [inline]
       __x64_sys_ioctl+0x19e/0x210  fs/ioctl.c:856
       do_syscall_x64  arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x3f/0x90  arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x72/0xdc
      
      The buggy address belongs to the object at ffff888105b0e400
       which belongs to the cache kmalloc-1k of size 1024
      The buggy address is located 16 bytes inside of
       freed 1024-byte region [ffff888105b0e400, ffff888105b0e800)
      
      The buggy address belongs to the physical page:
      head:ffffea000416c200 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
      flags: 0x200000000010200(slab|head|node=0|zone=2)
      raw: 0200000000010200 ffff8881000430c0 ffffea00044c7010 ffffea0004510e10
      raw: 0000000000000000 00000000000a000a 00000001ffffffff 0000000000000000
      page dumped because: kasan: bad access detected
      
      Memory state around the buggy address:
       ffff888105b0e300: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
       ffff888105b0e380: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
      >ffff888105b0e400: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                               ^
       ffff888105b0e480: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
       ffff888105b0e500: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      
      In summary, this patch solves those use-after-free by
      
      1. Re-implement the nfc_llcp_find_local(). The current version does not
      grab the reference when getting the local from the linked list.  For
      example, the llcp_sock_bind() gets the reference like below:
      
      // llcp_sock_bind()
      
          local = nfc_llcp_find_local(dev); // A
          ..... \
                 | raceable
          ..... /
          llcp_sock->local = nfc_llcp_local_get(local); // B
      
      There is an apparent race window that one can  drop the reference
      and free the local object fetched in (A) before (B) gets the reference.
      
      2. Some callers of the nfc_llcp_find_local() do not grab the reference
      at all. For example, the nfc_genl_llc_{{get/set}_params/sdreq} functions.
      We add the nfc_llcp_local_put() for them. Moreover, we add the necessary
      error handling function to put the reference.
      
      3. Add the nfc_llcp_remove_local() helper. The local object is removed
      from the linked list in local_release() when all reference is gone. This
      patch removes it when nfc_llcp_unregister_device() is called.
      
      Therefore, every caller of nfc_llcp_find_local() will get a reference
      even when the nfc_llcp_unregister_device() is called. This promises no
      use-after-free for the local object is ever possible.
      
      Fixes: 52feb444 ("NFC: Extend netlink interface for LTO, RW, and MIUX parameters support")
      Fixes: c7aa1225 ("NFC: Take a reference on the LLCP local pointer when creating a socket")
      Signed-off-by: NLin Ma <linma@zju.edu.cn>
      Reviewed-by: NSimon Horman <simon.horman@corigine.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NZiyang Xuan <william.xuanziyang@huawei.com>
      (cherry picked from commit d0ea613f)
      b7dafa7b
    • K
      nfc: llcp: simplify llcp_sock_connect() error paths · 0242acf2
      Krzysztof Kozlowski 提交于
      stable inclusion
      from stable-v5.10.188
      commit a3a1550c4d2e5fecbd317778ef2832e933d4774b
      category: bugfix
      bugzilla: https://gitee.com/src-openeuler/kernel/issues/I7NLJR
      CVE: CVE-2023-3863
      
      Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=a3a1550c4d2e5fecbd317778ef2832e933d4774b
      
      ---------------------------
      
      [ Upstream commit ec10fd15 ]
      
      The llcp_sock_connect() error paths were using a mixed way of central
      exit (goto) and cleanup
      Signed-off-by: NKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      Stable-dep-of: 6709d4b7bc2e ("net: nfc: Fix use-after-free caused by nfc_llcp_find_local")
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      Signed-off-by: NZiyang Xuan <william.xuanziyang@huawei.com>
      (cherry picked from commit 81636dc6)
      0242acf2
    • O
      !1588 [sync] PR-1557: net/sched: cls_fw: Fix improper refcount update leads to use-after-free · 768f4f54
      openeuler-ci-bot 提交于
      Merge Pull Request from: @openeuler-sync-bot 
       
      
      Origin pull request: 
      https://gitee.com/openeuler/kernel/pulls/1557 
       
      PR sync from: Dong Chenchen <dongchenchen2@huawei.com>
      https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/233WCLKDGOFGUPF6WDFRIM426TVBRFML/ 
       
      https://gitee.com/src-openeuler/kernel/issues/I7N3N3 
       
      Link:https://gitee.com/openeuler/kernel/pulls/1588 
      
      Reviewed-by: Yue Haibing <yuehaibing@huawei.com> 
      Signed-off-by: Jialin Zhang <zhangjialin11@huawei.com> 
      768f4f54