Skip to content
  1. Nov 03, 2022
    • Eric Dumazet's avatar
      kcm: annotate data-races around kcm->rx_psock · 13dba69e
      Eric Dumazet authored
      [ Upstream commit 15e4dabd ]
      
      kcm->rx_psock can be read locklessly in kcm_rfree().
      Annotate the read and writes accordingly.
      
      We do the same for kcm->rx_wait in the following patch.
      
      syzbot reported:
      BUG: KCSAN: data-race in kcm_rfree / unreserve_rx_kcm
      
      write to 0xffff888123d827b8 of 8 bytes by task 2758 on cpu 1:
      unreserve_rx_kcm+0x72/0x1f0 net/kcm/kcmsock.c:313
      kcm_rcv_strparser+0x2b5/0x3a0 net/kcm/kcmsock.c:373
      __strp_recv+0x64c/0xd20 net/strparser/strparser.c:301
      strp_recv+0x6d/0x80 net/strparser/strparser.c:335
      tcp_read_sock+0x13e/0x5a0 net/ipv4/tcp.c:1703
      strp_read_sock net/strparser/strparser.c:358 [inline]
      do_strp_work net/strparser/strparser.c:406 [inline]
      strp_work+0xe8/0x180 net/strparser/strparser.c:415
      process_one_work+0x3d3/0x720 kernel/workqueue.c:2289
      worker_thread+0x618/0xa70 kernel/workqueue.c:2436
      kthread+0x1a9/0x1e0 kernel/kthread.c:376
      ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:306
      
      read to 0xffff888123d827b8 of 8 bytes by task 5859 on cpu 0:
      kcm_rfree+0x14c/0x220 net/kcm/kcmsock.c:181
      skb_release_head_state+0x8e/0x160 net/core/skbuff.c:841
      skb_release_all net/core/skbuff.c:852 [inline]
      __kfree_skb net/core/skbuff.c:868 [inline]
      kfree_skb_reason+0x5c/0x260 net/core/skbuff.c:891
      kfree_skb include/linux/skbuff.h:1216 [inline]
      kcm_recvmsg+0x226/0x2b0 net/kcm/kcmsock.c:1161
      ____sys_recvmsg+0x16c/0x2e0
      ___sys_recvmsg net/socket.c:2743 [inline]
      do_recvmmsg+0x2f1/0x710 net/socket.c:2837
      __sys_recvmmsg net/socket.c:2916 [inline]
      __do_sys_recvmmsg net/socket.c:2939 [inline]
      __se_sys_recvmmsg net/socket.c:2932 [inline]
      __x64_sys_recvmmsg+0xde/0x160 net/socket.c:2932
      do_syscall_x64 arch/x86/entry/common.c:50 [inline]
      do_syscall_64+0x2b/0x70 arch/x86/entry/common.c:80
      entry_SYSCALL_64_after_hwframe+0x63/0xcd
      
      value changed: 0xffff88812971ce00 -> 0x0000000000000000
      
      Reported by Kernel Concurrency Sanitizer on:
      CPU: 0 PID: 5859 Comm: syz-executor.3 Not tainted 6.0.0-syzkaller-12189-g19d17ab7c68b-dirty #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/22/2022
      
      Fixes: ab7ac4eb
      
       ("kcm: Kernel Connection Multiplexor module")
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      13dba69e
    • Yang Yingliang's avatar
      ALSA: ac97: fix possible memory leak in snd_ac97_dev_register() · a602ec9d
      Yang Yingliang authored
      [ Upstream commit 4881bda5 ]
      
      If device_register() fails in snd_ac97_dev_register(), it should
      call put_device() to give up reference, or the name allocated in
      dev_set_name() is leaked.
      
      Fixes: 0ca06a00
      
       ("[ALSA] AC97 bus interface for ad-hoc drivers")
      Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
      Link: https://lore.kernel.org/r/20221019093025.1179475-1-yangyingliang@huawei.com
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a602ec9d
    • Randy Dunlap's avatar
      arc: iounmap() arg is volatile · 0adda6e1
      Randy Dunlap authored
      [ Upstream commit c44f15c1 ]
      
      Add 'volatile' to iounmap()'s argument to prevent build warnings.
      This make it the same as other major architectures.
      
      Placates these warnings: (12 such warnings)
      
      ../drivers/video/fbdev/riva/fbdev.c: In function 'rivafb_probe':
      ../drivers/video/fbdev/riva/fbdev.c:2067:42: error: passing argument 1 of 'iounmap' discards 'volatile' qualifier from pointer target type [-Werror=discarded-qualifiers]
       2067 |                 iounmap(default_par->riva.PRAMIN);
      
      Fixes: 1162b070
      
       ("ARC: I/O and DMA Mappings")
      Signed-off-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Cc: Vineet Gupta <vgupta@kernel.org>
      Cc: linux-snps-arc@lists.infradead.org
      Cc: Arnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarVineet Gupta <vgupta@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0adda6e1
    • Nathan Huckleberry's avatar
      drm/msm: Fix return type of mdp4_lvds_connector_mode_valid · 474c6983
      Nathan Huckleberry authored
      [ Upstream commit 0b33a33b
      
       ]
      
      The mode_valid field in drm_connector_helper_funcs is expected to be of
      type:
      enum drm_mode_status (* mode_valid) (struct drm_connector *connector,
                                           struct drm_display_mode *mode);
      
      The mismatched return type breaks forward edge kCFI since the underlying
      function definition does not match the function hook definition.
      
      The return type of mdp4_lvds_connector_mode_valid should be changed from
      int to enum drm_mode_status.
      
      Reported-by: default avatarDan Carpenter <error27@gmail.com>
      Link: https://github.com/ClangBuiltLinux/linux/issues/1703
      Cc: llvm@lists.linux.dev
      Signed-off-by: default avatarNathan Huckleberry <nhuck@google.com>
      Fixes: 3e87599b
      
       ("drm/msm/mdp4: add LVDS panel support")
      Reviewed-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
      Reviewed-by: default avatarNathan Chancellor <nathan@kernel.org>
      Patchwork: https://patchwork.freedesktop.org/patch/502878/
      Link: https://lore.kernel.org/r/20220913205551.155128-1-nhuck@google.com
      Signed-off-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      474c6983
    • Wei Yongjun's avatar
      net: ieee802154: fix error return code in dgram_bind() · 7948db09
      Wei Yongjun authored
      commit 444d8ad4 upstream.
      
      Fix to return error code -EINVAL from the error handling
      case instead of 0, as done elsewhere in this function.
      
      Fixes: 94160108
      
       ("net/ieee802154: fix uninit value bug in dgram_sendmsg")
      Signed-off-by: default avatarWei Yongjun <weiyongjun1@huawei.com>
      Link: https://lore.kernel.org/r/20220919160830.1436109-1-weiyongjun@huaweicloud.com
      Signed-off-by: default avatarStefan Schmidt <stefan@datenfreihafen.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7948db09
    • Rik van Riel's avatar
      mm,hugetlb: take hugetlb_lock before decrementing h->resv_huge_pages · 3e50a07b
      Rik van Riel authored
      commit 12df140f upstream.
      
      The h->*_huge_pages counters are protected by the hugetlb_lock, but
      alloc_huge_page has a corner case where it can decrement the counter
      outside of the lock.
      
      This could lead to a corrupted value of h->resv_huge_pages, which we have
      observed on our systems.
      
      Take the hugetlb_lock before decrementing h->resv_huge_pages to avoid a
      potential race.
      
      Link: https://lkml.kernel.org/r/20221017202505.0e6a4fcd@imladris.surriel.com
      Fixes: a88c7695
      
       ("mm: hugetlb: fix hugepage memory leak caused by wrong reserve count")
      Signed-off-by: default avatarRik van Riel <riel@surriel.com>
      Reviewed-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
      Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
      Cc: Glen McCready <gkmccready@meta.com>
      Cc: Mike Kravetz <mike.kravetz@oracle.com>
      Cc: Muchun Song <songmuchun@bytedance.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3e50a07b
    • M. Vefa Bicakci's avatar
      xen/gntdev: Prevent leaking grants · b043f2ca
      M. Vefa Bicakci authored
      commit 0991028c upstream.
      
      Prior to this commit, if a grant mapping operation failed partially,
      some of the entries in the map_ops array would be invalid, whereas all
      of the entries in the kmap_ops array would be valid. This in turn would
      cause the following logic in gntdev_map_grant_pages to become invalid:
      
        for (i = 0; i < map->count; i++) {
          if (map->map_ops[i].status == GNTST_okay) {
            map->unmap_ops[i].handle = map->map_ops[i].handle;
            if (!use_ptemod)
              alloced++;
          }
          if (use_ptemod) {
            if (map->kmap_ops[i].status == GNTST_okay) {
              if (map->map_ops[i].status == GNTST_okay)
                alloced++;
              map->kunmap_ops[i].handle = map->kmap_ops[i].handle;
            }
          }
        }
        ...
        atomic_add(alloced, &map->live_grants);
      
      Assume that use_ptemod is true (i.e., the domain mapping the granted
      pages is a paravirtualized domain). In the code excerpt above, note that
      the "alloced" variable is only incremented when both kmap_ops[i].status
      and map_ops[i].status are set to GNTST_okay (i.e., both mapping
      operations are successful).  However, as also noted above, there are
      cases where a grant mapping operation fails partially, breaking the
      assumption of the code excerpt above.
      
      The aforementioned causes map->live_grants to be incorrectly set. In
      some cases, all of the map_ops mappings fail, but all of the kmap_ops
      mappings succeed, meaning that live_grants may remain zero. This in turn
      makes it impossible to unmap the successfully grant-mapped pages pointed
      to by kmap_ops, because unmap_grant_pages has the following snippet of
      code at its beginning:
      
        if (atomic_read(&map->live_grants) == 0)
          return; /* Nothing to do */
      
      In other cases where only some of the map_ops mappings fail but all
      kmap_ops mappings succeed, live_grants is made positive, but when the
      user requests unmapping the grant-mapped pages, __unmap_grant_pages_done
      will then make map->live_grants negative, because the latter function
      does not check if all of the pages that were requested to be unmapped
      were actually unmapped, and the same function unconditionally subtracts
      "data->count" (i.e., a value that can be greater than map->live_grants)
      from map->live_grants. The side effects of a negative live_grants value
      have not been studied.
      
      The net effect of all of this is that grant references are leaked in one
      of the above conditions. In Qubes OS v4.1 (which uses Xen's grant
      mechanism extensively for X11 GUI isolation), this issue manifests
      itself with warning messages like the following to be printed out by the
      Linux kernel in the VM that had granted pages (that contain X11 GUI
      window data) to dom0: "g.e. 0x1234 still pending", especially after the
      user rapidly resizes GUI VM windows (causing some grant-mapping
      operations to partially or completely fail, due to the fact that the VM
      unshares some of the pages as part of the window resizing, making the
      pages impossible to grant-map from dom0).
      
      The fix for this issue involves counting all successful map_ops and
      kmap_ops mappings separately, and then adding the sum to live_grants.
      During unmapping, only the number of successfully unmapped grants is
      subtracted from live_grants. The code is also modified to check for
      negative live_grants values after the subtraction and warn the user.
      
      Link: https://github.com/QubesOS/qubes-issues/issues/7631
      Fixes: dbe97cff
      
       ("xen/gntdev: Avoid blocking in unmap_grant_pages()")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarM. Vefa Bicakci <m.v.b@runbox.com>
      Acked-by: default avatarDemi Marie Obenour <demi@invisiblethingslab.com>
      Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
      Link: https://lore.kernel.org/r/20221002222006.2077-2-m.v.b@runbox.com
      Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
      Signed-off-by: default avatarDemi Marie Obenour <demi@invisiblethingslab.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b043f2ca
    • Jan Beulich's avatar
      Xen/gntdev: don't ignore kernel unmapping error · 0fb10476
      Jan Beulich authored
      commit f28347cc
      
       upstream.
      
      While working on XSA-361 and its follow-ups, I failed to spot another
      place where the kernel mapping part of an operation was not treated the
      same as the user space part. Detect and propagate errors and add a 2nd
      pr_debug().
      
      Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
      Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
      Link: https://lore.kernel.org/r/c2513395-74dc-aea3-9192-fd265aa44e35@suse.com
      Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
      Signed-off-by: default avatarDemi Marie Obenour <demi@invisiblethingslab.com>
      Co-authored-by: default avatarDemi Marie Obenour <demi@invisiblethingslab.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0fb10476
    • Heiko Carstens's avatar
      s390/futex: add missing EX_TABLE entry to __futex_atomic_op() · c6ca9cc3
      Heiko Carstens authored
      commit a262d3ad
      
       upstream.
      
      For some exception types the instruction address points behind the
      instruction that caused the exception. Take that into account and add
      the missing exception table entry.
      
      Cc: <stable@vger.kernel.org>
      Reviewed-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c6ca9cc3
    • Christian A. Ehrhardt's avatar
      kernfs: fix use-after-free in __kernfs_remove · 4dfd6a47
      Christian A. Ehrhardt authored
      commit 4abc9965
      
       upstream.
      
      Syzkaller managed to trigger concurrent calls to
      kernfs_remove_by_name_ns() for the same file resulting in
      a KASAN detected use-after-free. The race occurs when the root
      node is freed during kernfs_drain().
      
      To prevent this acquire an additional reference for the root
      of the tree that is removed before calling __kernfs_remove().
      
      Found by syzkaller with the following reproducer (slab_nomerge is
      required):
      
      syz_mount_image$ext4(0x0, &(0x7f0000000100)='./file0\x00', 0x100000, 0x0, 0x0, 0x0, 0x0)
      r0 = openat(0xffffffffffffff9c, &(0x7f0000000080)='/proc/self/exe\x00', 0x0, 0x0)
      close(r0)
      pipe2(&(0x7f0000000140)={0xffffffffffffffff, <r1=>0xffffffffffffffff}, 0x800)
      mount$9p_fd(0x0, &(0x7f0000000040)='./file0\x00', &(0x7f00000000c0), 0x408, &(0x7f0000000280)={'trans=fd,', {'rfdno', 0x3d, r0}, 0x2c, {'wfdno', 0x3d, r1}, 0x2c, {[{@cache_loose}, {@mmap}, {@loose}, {@loose}, {@mmap}], [{@mask={'mask', 0x3d, '^MAY_EXEC'}}, {@fsmagic={'fsmagic', 0x3d, 0x10001}}, {@dont_hash}]}})
      
      Sample report:
      
      ==================================================================
      BUG: KASAN: use-after-free in kernfs_type include/linux/kernfs.h:335 [inline]
      BUG: KASAN: use-after-free in kernfs_leftmost_descendant fs/kernfs/dir.c:1261 [inline]
      BUG: KASAN: use-after-free in __kernfs_remove.part.0+0x843/0x960 fs/kernfs/dir.c:1369
      Read of size 2 at addr ffff8880088807f0 by task syz-executor.2/857
      
      CPU: 0 PID: 857 Comm: syz-executor.2 Not tainted 6.0.0-rc3-00363-g7726d4c3e60b #5
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0x6e/0x91 lib/dump_stack.c:106
       print_address_description mm/kasan/report.c:317 [inline]
       print_report.cold+0x5e/0x5e5 mm/kasan/report.c:433
       kasan_report+0xa3/0x130 mm/kasan/report.c:495
       kernfs_type include/linux/kernfs.h:335 [inline]
       kernfs_leftmost_descendant fs/kernfs/dir.c:1261 [inline]
       __kernfs_remove.part.0+0x843/0x960 fs/kernfs/dir.c:1369
       __kernfs_remove fs/kernfs/dir.c:1356 [inline]
       kernfs_remove_by_name_ns+0x108/0x190 fs/kernfs/dir.c:1589
       sysfs_slab_add+0x133/0x1e0 mm/slub.c:5943
       __kmem_cache_create+0x3e0/0x550 mm/slub.c:4899
       create_cache mm/slab_common.c:229 [inline]
       kmem_cache_create_usercopy+0x167/0x2a0 mm/slab_common.c:335
       p9_client_create+0xd4d/0x1190 net/9p/client.c:993
       v9fs_session_init+0x1e6/0x13c0 fs/9p/v9fs.c:408
       v9fs_mount+0xb9/0xbd0 fs/9p/vfs_super.c:126
       legacy_get_tree+0xf1/0x200 fs/fs_context.c:610
       vfs_get_tree+0x85/0x2e0 fs/super.c:1530
       do_new_mount fs/namespace.c:3040 [inline]
       path_mount+0x675/0x1d00 fs/namespace.c:3370
       do_mount fs/namespace.c:3383 [inline]
       __do_sys_mount fs/namespace.c:3591 [inline]
       __se_sys_mount fs/namespace.c:3568 [inline]
       __x64_sys_mount+0x282/0x300 fs/namespace.c:3568
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x38/0x90 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x63/0xcd
      RIP: 0033:0x7f725f983aed
      Code: 02 b8 ff ff ff ff c3 66 0f 1f 44 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
      RSP: 002b:00007f725f0f7028 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
      RAX: ffffffffffffffda RBX: 00007f725faa3f80 RCX: 00007f725f983aed
      RDX: 00000000200000c0 RSI: 0000000020000040 RDI: 0000000000000000
      RBP: 00007f725f9f419c R08: 0000000020000280 R09: 0000000000000000
      R10: 0000000000000408 R11: 0000000000000246 R12: 0000000000000000
      R13: 0000000000000006 R14: 00007f725faa3f80 R15: 00007f725f0d7000
       </TASK>
      
      Allocated by task 855:
       kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38
       kasan_set_track mm/kasan/common.c:45 [inline]
       set_alloc_info mm/kasan/common.c:437 [inline]
       __kasan_slab_alloc+0x66/0x80 mm/kasan/common.c:470
       kasan_slab_alloc include/linux/kasan.h:224 [inline]
       slab_post_alloc_hook mm/slab.h:727 [inline]
       slab_alloc_node mm/slub.c:3243 [inline]
       slab_alloc mm/slub.c:3251 [inline]
       __kmem_cache_alloc_lru mm/slub.c:3258 [inline]
       kmem_cache_alloc+0xbf/0x200 mm/slub.c:3268
       kmem_cache_zalloc include/linux/slab.h:723 [inline]
       __kernfs_new_node+0xd4/0x680 fs/kernfs/dir.c:593
       kernfs_new_node fs/kernfs/dir.c:655 [inline]
       kernfs_create_dir_ns+0x9c/0x220 fs/kernfs/dir.c:1010
       sysfs_create_dir_ns+0x127/0x290 fs/sysfs/dir.c:59
       create_dir lib/kobject.c:63 [inline]
       kobject_add_internal+0x24a/0x8d0 lib/kobject.c:223
       kobject_add_varg lib/kobject.c:358 [inline]
       kobject_init_and_add+0x101/0x160 lib/kobject.c:441
       sysfs_slab_add+0x156/0x1e0 mm/slub.c:5954
       __kmem_cache_create+0x3e0/0x550 mm/slub.c:4899
       create_cache mm/slab_common.c:229 [inline]
       kmem_cache_create_usercopy+0x167/0x2a0 mm/slab_common.c:335
       p9_client_create+0xd4d/0x1190 net/9p/client.c:993
       v9fs_session_init+0x1e6/0x13c0 fs/9p/v9fs.c:408
       v9fs_mount+0xb9/0xbd0 fs/9p/vfs_super.c:126
       legacy_get_tree+0xf1/0x200 fs/fs_context.c:610
       vfs_get_tree+0x85/0x2e0 fs/super.c:1530
       do_new_mount fs/namespace.c:3040 [inline]
       path_mount+0x675/0x1d00 fs/namespace.c:3370
       do_mount fs/namespace.c:3383 [inline]
       __do_sys_mount fs/namespace.c:3591 [inline]
       __se_sys_mount fs/namespace.c:3568 [inline]
       __x64_sys_mount+0x282/0x300 fs/namespace.c:3568
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x38/0x90 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x63/0xcd
      
      Freed by task 857:
       kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38
       kasan_set_track+0x21/0x30 mm/kasan/common.c:45
       kasan_set_free_info+0x20/0x40 mm/kasan/generic.c:370
       ____kasan_slab_free mm/kasan/common.c:367 [inline]
       ____kasan_slab_free mm/kasan/common.c:329 [inline]
       __kasan_slab_free+0x108/0x190 mm/kasan/common.c:375
       kasan_slab_free include/linux/kasan.h:200 [inline]
       slab_free_hook mm/slub.c:1754 [inline]
       slab_free_freelist_hook mm/slub.c:1780 [inline]
       slab_free mm/slub.c:3534 [inline]
       kmem_cache_free+0x9c/0x340 mm/slub.c:3551
       kernfs_put.part.0+0x2b2/0x520 fs/kernfs/dir.c:547
       kernfs_put+0x42/0x50 fs/kernfs/dir.c:521
       __kernfs_remove.part.0+0x72d/0x960 fs/kernfs/dir.c:1407
       __kernfs_remove fs/kernfs/dir.c:1356 [inline]
       kernfs_remove_by_name_ns+0x108/0x190 fs/kernfs/dir.c:1589
       sysfs_slab_add+0x133/0x1e0 mm/slub.c:5943
       __kmem_cache_create+0x3e0/0x550 mm/slub.c:4899
       create_cache mm/slab_common.c:229 [inline]
       kmem_cache_create_usercopy+0x167/0x2a0 mm/slab_common.c:335
       p9_client_create+0xd4d/0x1190 net/9p/client.c:993
       v9fs_session_init+0x1e6/0x13c0 fs/9p/v9fs.c:408
       v9fs_mount+0xb9/0xbd0 fs/9p/vfs_super.c:126
       legacy_get_tree+0xf1/0x200 fs/fs_context.c:610
       vfs_get_tree+0x85/0x2e0 fs/super.c:1530
       do_new_mount fs/namespace.c:3040 [inline]
       path_mount+0x675/0x1d00 fs/namespace.c:3370
       do_mount fs/namespace.c:3383 [inline]
       __do_sys_mount fs/namespace.c:3591 [inline]
       __se_sys_mount fs/namespace.c:3568 [inline]
       __x64_sys_mount+0x282/0x300 fs/namespace.c:3568
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x38/0x90 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x63/0xcd
      
      The buggy address belongs to the object at ffff888008880780
       which belongs to the cache kernfs_node_cache of size 128
      The buggy address is located 112 bytes inside of
       128-byte region [ffff888008880780, ffff888008880800)
      
      The buggy address belongs to the physical page:
      page:00000000732833f8 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x8880
      flags: 0x100000000000200(slab|node=0|zone=1)
      raw: 0100000000000200 0000000000000000 dead000000000122 ffff888001147280
      raw: 0000000000000000 0000000000150015 00000001ffffffff 0000000000000000
      page dumped because: kasan: bad access detected
      
      Memory state around the buggy address:
       ffff888008880680: fc fc fc fc fc fc fc fc fa fb fb fb fb fb fb fb
       ffff888008880700: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
      >ffff888008880780: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                                                   ^
       ffff888008880800: fc fc fc fc fc fc fc fc fa fb fb fb fb fb fb fb
       ffff888008880880: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
      ==================================================================
      
      Acked-by: default avatarTejun Heo <tj@kernel.org>
      Cc: stable <stable@kernel.org> # -rc3
      Signed-off-by: default avatarChristian A. Ehrhardt <lk@c--e.de>
      Link: https://lore.kernel.org/r/20220913121723.691454-1-lk@c--e.de
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4dfd6a47
    • Matthew Ma's avatar
      mmc: core: Fix kernel panic when remove non-standard SDIO card · b8b29659
      Matthew Ma authored
      commit 9972e6b4 upstream.
      
      SDIO tuple is only allocated for standard SDIO card, especially it causes
      memory corruption issues when the non-standard SDIO card has removed, which
      is because the card device's reference counter does not increase for it at
      sdio_init_func(), but all SDIO card device reference counter gets decreased
      at sdio_release_func().
      
      Fixes: 6f51be3d
      
       ("sdio: allow non-standard SDIO cards")
      Signed-off-by: default avatarMatthew Ma <mahongwei@zeku.com>
      Reviewed-by: default avatarWeizhao Ouyang <ouyangweizhao@zeku.com>
      Reviewed-by: default avatarJohn Wang <wangdayu@zeku.com>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20221014034951.2300386-1-ouyangweizhao@zeku.com
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b8b29659
    • Johan Hovold's avatar
      drm/msm/hdmi: fix memory corruption with too many bridges · a9c1a699
      Johan Hovold authored
      commit 4c1294da upstream.
      
      Add the missing sanity check on the bridge counter to avoid corrupting
      data beyond the fixed-sized bridge array in case there are ever more
      than eight bridges.
      
      Fixes: a3376e3e
      
       ("drm/msm: convert to drm_bridge")
      Cc: stable@vger.kernel.org	# 3.12
      Signed-off-by: default avatarJohan Hovold <johan+linaro@kernel.org>
      Tested-by: default avatarKuogee Hsieh <quic_khsieh@quicinc.com>
      Reviewed-by: default avatarKuogee Hsieh <quic_khsieh@quicinc.com>
      Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Patchwork: https://patchwork.freedesktop.org/patch/502670/
      Link: https://lore.kernel.org/r/20220913085320.8577-5-johan+linaro@kernel.org
      Signed-off-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a9c1a699
    • Miquel Raynal's avatar
      mac802154: Fix LQI recording · ec4cb427
      Miquel Raynal authored
      commit 5a5c4e06 upstream.
      
      Back in 2014, the LQI was saved in the skb control buffer (skb->cb, or
      mac_cb(skb)) without any actual reset of this area prior to its use.
      
      As part of a useful rework of the use of this region, 32edc40a
      ("ieee802154: change _cb handling slightly") introduced mac_cb_init() to
      basically memset the cb field to 0. In particular, this new function got
      called at the beginning of mac802154_parse_frame_start(), right before
      the location where the buffer got actually filled.
      
      What went through unnoticed however, is the fact that the very first
      helper called by device drivers in the receive path already used this
      area to save the LQI value for later extraction. Resetting the cb field
      "so late" led to systematically zeroing the LQI.
      
      If we consider the reset of the cb field needed, we can make it as soon
      as we get an skb from a device driver, right before storing the LQI,
      as is the very first time we need to write something there.
      
      Cc: stable@vger.kernel.org
      Fixes: 32edc40a
      
       ("ieee802154: change _cb handling slightly")
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Acked-by: default avatarAlexander Aring <aahringo@redhat.com>
      Link: https://lore.kernel.org/r/20221020142535.1038885-1-miquel.raynal@bootlin.com
      Signed-off-by: default avatarStefan Schmidt <stefan@datenfreihafen.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ec4cb427
    • Hyunwoo Kim's avatar
      fbdev: smscufx: Fix several use-after-free bugs · 6f2075ea
      Hyunwoo Kim authored
      commit cc67482c
      
       upstream.
      
      Several types of UAFs can occur when physically removing a USB device.
      
      Adds ufx_ops_destroy() function to .fb_destroy of fb_ops, and
      in this function, there is kref_put() that finally calls ufx_free().
      
      This fix prevents multiple UAFs.
      
      Signed-off-by: default avatarHyunwoo Kim <imv4bel@gmail.com>
      Link: https://lore.kernel.org/linux-fbdev/20221011153436.GA4446@ubuntu/
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarHelge Deller <deller@gmx.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6f2075ea
    • Matti Vaittinen's avatar
      tools: iio: iio_utils: fix digit calculation · 48797c0b
      Matti Vaittinen authored
      commit 72b2aa38 upstream.
      
      The iio_utils uses a digit calculation in order to know length of the
      file name containing a buffer number. The digit calculation does not
      work for number 0.
      
      This leads to allocation of one character too small buffer for the
      file-name when file name contains value '0'. (Eg. buffer0).
      
      Fix digit calculation by returning one digit to be present for number
      '0'.
      
      Fixes: 096f9b86
      
       ("tools:iio:iio_utils: implement digit calculation")
      Signed-off-by: default avatarMatti Vaittinen <mazziesaccount@gmail.com>
      Link: https://lore.kernel.org/r/Y0f+tKCz+ZAIoroQ@dc75zzyyyyyyyyyyyyycy-3.rev.dnainternet.fi
      Cc: <Stable@vger.kernel.org>
      Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      48797c0b
    • Mathias Nyman's avatar
      xhci: Remove device endpoints from bandwidth list when freeing the device · 5e4ce28a
      Mathias Nyman authored
      commit 5aed5b7c
      
       upstream.
      
      Endpoints are normally deleted from the bandwidth list when they are
      dropped, before the virt device is freed.
      
      If xHC host is dying or being removed then the endpoints aren't dropped
      cleanly due to functions returning early to avoid interacting with a
      non-accessible host controller.
      
      So check and delete endpoints that are still on the bandwidth list when
      freeing the virt device.
      
      Solves a list_del corruption kernel crash when unbinding xhci-pci,
      caused by xhci_mem_cleanup() when it later tried to delete already freed
      endpoints from the bandwidth list.
      
      This only affects hosts that use software bandwidth checking, which
      currenty is only the xHC in intel Panther Point PCH (Ivy Bridge)
      
      Cc: stable@vger.kernel.org
      Reported-by: default avatarMarek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
      Tested-by: default avatarMarek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
      Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
      Link: https://lore.kernel.org/r/20221024142720.4122053-5-mathias.nyman@intel.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5e4ce28a
    • Justin Chen's avatar
      usb: bdc: change state when port disconnected · bcc98139
      Justin Chen authored
      commit fb8f60dd
      
       upstream.
      
      When port is connected and then disconnected, the state stays as
      configured. Which is incorrect as the port is no longer configured,
      but in a not attached state.
      
      Signed-off-by: default avatarJustin Chen <justinpopo6@gmail.com>
      Acked-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Fixes: efed421a
      
       ("usb: gadget: Add UDC driver for Broadcom USB3.0 device controller IP BDC")
      Cc: stable <stable@kernel.org>
      Link: https://lore.kernel.org/r/1664997235-18198-1-git-send-email-justinpopo6@gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bcc98139
    • Hannu Hartikainen's avatar
      USB: add RESET_RESUME quirk for NVIDIA Jetson devices in RCM · d77b3aa1
      Hannu Hartikainen authored
      commit fc4ade55
      
       upstream.
      
      NVIDIA Jetson devices in Force Recovery mode (RCM) do not support
      suspending, ie. flashing fails if the device has been suspended. The
      devices are still visible in lsusb and seem to work otherwise, making
      the issue hard to debug. This has been discovered in various forum
      posts, eg. [1].
      
      The patch has been tested on NVIDIA Jetson AGX Xavier, but I'm adding
      all the Jetson models listed in [2] on the assumption that they all
      behave similarly.
      
      [1]: https://forums.developer.nvidia.com/t/flashing-not-working/72365
      [2]: https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3271/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/quick_start.html
      
      Signed-off-by: default avatarHannu Hartikainen <hannu@hrtk.in>
      Cc: stable <stable@kernel.org>  # after 6.1-rc3
      Link: https://lore.kernel.org/r/20220919171610.30484-1-hannu@hrtk.in
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d77b3aa1
    • Jason A. Donenfeld's avatar
      ALSA: au88x0: use explicitly signed char · 456ffbbd
      Jason A. Donenfeld authored
      commit ee03c0f2
      
       upstream.
      
      With char becoming unsigned by default, and with `char` alone being
      ambiguous and based on architecture, signed chars need to be marked
      explicitly as such. This fixes warnings like:
      
      sound/pci/au88x0/au88x0_core.c:2029 vortex_adb_checkinout() warn: signedness bug returning '(-22)'
      sound/pci/au88x0/au88x0_core.c:2046 vortex_adb_checkinout() warn: signedness bug returning '(-12)'
      sound/pci/au88x0/au88x0_core.c:2125 vortex_adb_allocroute() warn: 'vortex_adb_checkinout(vortex, (0), en, 0)' is unsigned
      sound/pci/au88x0/au88x0_core.c:2170 vortex_adb_allocroute() warn: 'vortex_adb_checkinout(vortex, stream->resources, en, 4)' is unsigned
      
      As well, since one function returns errnos, return an `int` rather than
      a `signed char`.
      
      Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
      Cc: <stable@vger.kernel.org>
      Link: https://lore.kernel.org/r/20221024162929.536004-1-Jason@zx2c4.com
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      456ffbbd
    • Steven Rostedt (Google)'s avatar
      ALSA: Use del_timer_sync() before freeing timer · af52f240
      Steven Rostedt (Google) authored
      commit f0a86878 upstream.
      
      The current code for freeing the emux timer is extremely dangerous:
      
        CPU0				CPU1
        ----				----
      snd_emux_timer_callback()
      			    snd_emux_free()
      			      spin_lock(&emu->voice_lock)
      			      del_timer(&emu->tlist); <-- returns immediately
      			      spin_unlock(&emu->voice_lock);
      			      [..]
      			      kfree(emu);
      
        spin_lock(&emu->voice_lock);
      
       [BOOM!]
      
      Instead just use del_timer_sync() which will wait for the timer to finish
      before continuing. No need to check if the timer is active or not when
      doing so.
      
      This doesn't fix the race of a possible re-arming of the timer, but at
      least it won't use the data that has just been freed.
      
      [ Fixed unused variable warning by tiwai ]
      
      Cc: stable@vger.kernel.org
      Fixes: 1da177e4
      
       ("Linux-2.6.12-rc2")
      Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
      Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Link: https://lore.kernel.org/r/20221026231236.6834b551@gandalf.local.home
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      af52f240
    • Werner Sembach's avatar
      ACPI: video: Force backlight native for more TongFang devices · 819f7dfd
      Werner Sembach authored
      commit 3dbc80a3 upstream.
      
      This commit is very different from the upstream commit! It fixes the same
      issue by adding more quirks, rather then the general fix from the 6.1
      kernel, because the general fix from the 6.1 kernel is part of a larger
      refactoring of the backlight code which is not suitable for the stable
      series.
      
      As described in "ACPI: video: Drop NL5x?U, PF4NU1F and PF5?U??
      acpi_backlight=native quirks" (10212754) the upstream commit "ACPI:
      video: Make backlight class device registration a separate step (v2)"
      (3dbc80a3
      
      ) makes these quirks unnecessary. However as mentioned in this
      bugtracker ticket https://bugzilla.kernel.org/show_bug.cgi?id=215683#c17
      the upstream fix is part of a larger patchset that is overall too complex
      for stable.
      
      The TongFang GKxNRxx, GMxNGxx, GMxZGxx, and GMxRGxx / TUXEDO
      Stellaris/Polaris Gen 1-4, have the same problem as the Clevo NL5xRU and
      NL5xNU / TUXEDO Aura 15 Gen1 and Gen2:
      They have a working native and video interface for screen backlight.
      However the default detection mechanism first registers the video interface
      before unregistering it again and switching to the native interface during
      boot. This results in a dangling SBIOS request for backlight change for
      some reason, causing the backlight to switch to ~2% once per boot on the
      first power cord connect or disconnect event. Setting the native interface
      explicitly circumvents this buggy behaviour by avoiding the unregistering
      process.
      
      Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
      Signed-off-by: default avatarWerner Sembach <wse@tuxedocomputers.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      819f7dfd
    • Yang Yingliang's avatar
      net: hns: fix possible memory leak in hnae_ae_register() · a3c14895
      Yang Yingliang authored
      [ Upstream commit ff2f5ec5 ]
      
      Inject fault while probing module, if device_register() fails,
      but the refcount of kobject is not decreased to 0, the name
      allocated in dev_set_name() is leaked. Fix this by calling
      put_device(), so that name can be freed in callback function
      kobject_cleanup().
      
      unreferenced object 0xffff00c01aba2100 (size 128):
        comm "systemd-udevd", pid 1259, jiffies 4294903284 (age 294.152s)
        hex dump (first 32 bytes):
          68 6e 61 65 30 00 00 00 18 21 ba 1a c0 00 ff ff  hnae0....!......
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<0000000034783f26>] slab_post_alloc_hook+0xa0/0x3e0
          [<00000000748188f2>] __kmem_cache_alloc_node+0x164/0x2b0
          [<00000000ab0743e8>] __kmalloc_node_track_caller+0x6c/0x390
          [<000000006c0ffb13>] kvasprintf+0x8c/0x118
          [<00000000fa27bfe1>] kvasprintf_const+0x60/0xc8
          [<0000000083e10ed7>] kobject_set_name_vargs+0x3c/0xc0
          [<000000000b87affc>] dev_set_name+0x7c/0xa0
          [<000000003fd8fe26>] hnae_ae_register+0xcc/0x190 [hnae]
          [<00000000fe97edc9>] hns_dsaf_ae_init+0x9c/0x108 [hns_dsaf]
          [<00000000c36ff1eb>] hns_dsaf_probe+0x548/0x748 [hns_dsaf]
      
      Fixes: 6fe6611f
      
       ("net: add Hisilicon Network Subsystem hnae framework support")
      Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
      Reviewed-by: default avatarLeon Romanovsky <leonro@nvidia.com>
      Link: https://lore.kernel.org/r/20221018122451.1749171-1-yangyingliang@huawei.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      a3c14895
    • Xiaobo Liu's avatar
      net/atm: fix proc_mpc_write incorrect return value · 149af952
      Xiaobo Liu authored
      [ Upstream commit d8bde3bf ]
      
      Then the input contains '\0' or '\n', proc_mpc_write has read them,
      so the return value needs +1.
      
      Fixes: 1da177e4
      
       ("Linux-2.6.12-rc2")
      Signed-off-by: default avatarXiaobo Liu <cppcoffee@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      149af952
    • José Expósito's avatar
      HID: magicmouse: Do not set BTN_MOUSE on double report · 45e38311
      José Expósito authored
      [ Upstream commit bb5f0c85 ]
      
      Under certain conditions the Magic Trackpad can group 2 reports in a
      single packet. The packet is split and the raw event function is
      invoked recursively for each part.
      
      However, after processing each part, the BTN_MOUSE status is updated,
      sending multiple click events. [1]
      
      Return after processing double reports to avoid this issue.
      
      Link: https://gitlab.freedesktop.org/libinput/libinput/-/issues/811  # [1]
      Fixes: a462230e
      
       ("HID: magicmouse: enable Magic Trackpad support")
      Reported-by: default avatarNulo <git@nulo.in>
      Signed-off-by: default avatarJosé Expósito <jose.exposito89@gmail.com>
      Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
      Link: https://lore.kernel.org/r/20221009182747.90730-1-jose.exposito89@gmail.com
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      45e38311
    • James Morse's avatar
      arm64: errata: Remove AES hwcap for COMPAT tasks · cada070e
      James Morse authored
      commit 44b3834b
      
       upstream.
      
      Cortex-A57 and Cortex-A72 have an erratum where an interrupt that
      occurs between a pair of AES instructions in aarch32 mode may corrupt
      the ELR. The task will subsequently produce the wrong AES result.
      
      The AES instructions are part of the cryptographic extensions, which are
      optional. User-space software will detect the support for these
      instructions from the hwcaps. If the platform doesn't support these
      instructions a software implementation should be used.
      
      Remove the hwcap bits on affected parts to indicate user-space should
      not use the AES instructions.
      
      Acked-by: default avatarArd Biesheuvel <ardb@kernel.org>
      Signed-off-by: default avatarJames Morse <james.morse@arm.com>
      Link: https://lore.kernel.org/r/20220714161523.279570-3-james.morse@arm.com
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      [florian: resolved conflicts in arch/arm64/tools/cpucaps and cpu_errata.c]
      Signed-off-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cada070e
    • Kai-Heng Feng's avatar
      ata: ahci: Match EM_MAX_SLOTS with SATA_PMP_MAX_PORTS · f70bd433
      Kai-Heng Feng authored
      commit 1e41e693
      
       upstream.
      
      UBSAN complains about array-index-out-of-bounds:
      [ 1.980703] kernel: UBSAN: array-index-out-of-bounds in /build/linux-9H675w/linux-5.15.0/drivers/ata/libahci.c:968:41
      [ 1.980709] kernel: index 15 is out of range for type 'ahci_em_priv [8]'
      [ 1.980713] kernel: CPU: 0 PID: 209 Comm: scsi_eh_8 Not tainted 5.15.0-25-generic #25-Ubuntu
      [ 1.980716] kernel: Hardware name: System manufacturer System Product Name/P5Q3, BIOS 1102 06/11/2010
      [ 1.980718] kernel: Call Trace:
      [ 1.980721] kernel: <TASK>
      [ 1.980723] kernel: show_stack+0x52/0x58
      [ 1.980729] kernel: dump_stack_lvl+0x4a/0x5f
      [ 1.980734] kernel: dump_stack+0x10/0x12
      [ 1.980736] kernel: ubsan_epilogue+0x9/0x45
      [ 1.980739] kernel: __ubsan_handle_out_of_bounds.cold+0x44/0x49
      [ 1.980742] kernel: ahci_qc_issue+0x166/0x170 [libahci]
      [ 1.980748] kernel: ata_qc_issue+0x135/0x240
      [ 1.980752] kernel: ata_exec_internal_sg+0x2c4/0x580
      [ 1.980754] kernel: ? vprintk_default+0x1d/0x20
      [ 1.980759] kernel: ata_exec_internal+0x67/0xa0
      [ 1.980762] kernel: sata_pmp_read+0x8d/0xc0
      [ 1.980765] kernel: sata_pmp_read_gscr+0x3c/0x90
      [ 1.980768] kernel: sata_pmp_attach+0x8b/0x310
      [ 1.980771] kernel: ata_eh_revalidate_and_attach+0x28c/0x4b0
      [ 1.980775] kernel: ata_eh_recover+0x6b6/0xb30
      [ 1.980778] kernel: ? ahci_do_hardreset+0x180/0x180 [libahci]
      [ 1.980783] kernel: ? ahci_stop_engine+0xb0/0xb0 [libahci]
      [ 1.980787] kernel: ? ahci_do_softreset+0x290/0x290 [libahci]
      [ 1.980792] kernel: ? trace_event_raw_event_ata_eh_link_autopsy_qc+0xe0/0xe0
      [ 1.980795] kernel: sata_pmp_eh_recover.isra.0+0x214/0x560
      [ 1.980799] kernel: sata_pmp_error_handler+0x23/0x40
      [ 1.980802] kernel: ahci_error_handler+0x43/0x80 [libahci]
      [ 1.980806] kernel: ata_scsi_port_error_handler+0x2b1/0x600
      [ 1.980810] kernel: ata_scsi_error+0x9c/0xd0
      [ 1.980813] kernel: scsi_error_handler+0xa1/0x180
      [ 1.980817] kernel: ? scsi_unjam_host+0x1c0/0x1c0
      [ 1.980820] kernel: kthread+0x12a/0x150
      [ 1.980823] kernel: ? set_kthread_struct+0x50/0x50
      [ 1.980826] kernel: ret_from_fork+0x22/0x30
      [ 1.980831] kernel: </TASK>
      
      This happens because sata_pmp_init_links() initialize link->pmp up to
      SATA_PMP_MAX_PORTS while em_priv is declared as 8 elements array.
      
      I can't find the maximum Enclosure Management ports specified in AHCI
      spec v1.3.1, but "12.2.1 LED message type" states that "Port Multiplier
      Information" can utilize 4 bits, which implies it can support up to 16
      ports. Hence, use SATA_PMP_MAX_PORTS as EM_MAX_SLOTS to resolve the
      issue.
      
      BugLink: https://bugs.launchpad.net/bugs/1970074
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
      Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f70bd433
    • Alexander Stein's avatar
      ata: ahci-imx: Fix MODULE_ALIAS · d76c5f16
      Alexander Stein authored
      commit 979556f1 upstream.
      
      'ahci:' is an invalid prefix, preventing the module from autoloading.
      Fix this by using the 'platform:' prefix and DRV_NAME.
      
      Fixes: 9e54eae2
      
       ("ahci_imx: add ahci sata support on imx platforms")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAlexander Stein <alexander.stein@ew.tq-group.com>
      Reviewed-by: default avatarFabio Estevam <festevam@gmail.com>
      Signed-off-by: default avatarDamien Le Moal <damien.lemoal@opensource.wdc.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d76c5f16
    • Joseph Qi's avatar
      ocfs2: fix BUG when iput after ocfs2_mknod fails · f2c90dfd
      Joseph Qi authored
      commit 759a7c61 upstream.
      
      Commit b1529a41 "ocfs2: should reclaim the inode if
      '__ocfs2_mknod_locked' returns an error" tried to reclaim the claimed
      inode if __ocfs2_mknod_locked() fails later.  But this introduce a race,
      the freed bit may be reused immediately by another thread, which will
      update dinode, e.g.  i_generation.  Then iput this inode will lead to BUG:
      inode->i_generation != le32_to_cpu(fe->i_generation)
      
      We could make this inode as bad, but we did want to do operations like
      wipe in some cases.  Since the claimed inode bit can only affect that an
      dinode is missing and will return back after fsck, it seems not a big
      problem.  So just leave it as is by revert the reclaim logic.
      
      Link: https://lkml.kernel.org/r/20221017130227.234480-1-joseph.qi@linux.alibaba.com
      Fixes: b1529a41
      
       ("ocfs2: should reclaim the inode if '__ocfs2_mknod_locked' returns an error")
      Signed-off-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Reported-by: default avatarYan Wang <wangyan122@huawei.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Gang He <ghe@suse.com>
      Cc: Jun Piao <piaojun@huawei.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f2c90dfd
    • Joseph Qi's avatar
      ocfs2: clear dinode links count in case of error · d841744f
      Joseph Qi authored
      commit 28f4821b
      
       upstream.
      
      In ocfs2_mknod(), if error occurs after dinode successfully allocated,
      ocfs2 i_links_count will not be 0.
      
      So even though we clear inode i_nlink before iput in error handling, it
      still won't wipe inode since we'll refresh inode from dinode during inode
      lock.  So just like clear inode i_nlink, we clear ocfs2 i_links_count as
      well.  Also do the same change for ocfs2_symlink().
      
      Link: https://lkml.kernel.org/r/20221017130227.234480-2-joseph.qi@linux.alibaba.com
      Signed-off-by: default avatarJoseph Qi <joseph.qi@linux.alibaba.com>
      Reported-by: default avatarYan Wang <wangyan122@huawei.com>
      Cc: Mark Fasheh <mark@fasheh.com>
      Cc: Joel Becker <jlbec@evilplan.org>
      Cc: Junxiao Bi <junxiao.bi@oracle.com>
      Cc: Changwei Ge <gechangwei@live.cn>
      Cc: Gang He <ghe@suse.com>
      Cc: Jun Piao <piaojun@huawei.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d841744f
  2. Oct 26, 2022
    • Greg Kroah-Hartman's avatar
      Linux 4.9.331 · bdc8a139
      Greg Kroah-Hartman authored
      
      
      Link: https://lore.kernel.org/r/20221024112949.358278806@linuxfoundation.org
      Tested-by: default avatarPavel Machek (CIP) <pavel@denx.de>
      Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
      Tested-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
      Tested-by: default avatarLinux Kernel Functional Testing <lkft@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      v4.9.331
      bdc8a139
    • Martin Liska's avatar
      gcov: support GCC 12.1 and newer compilers · 02eb4402
      Martin Liska authored
      commit 977ef30a
      
       upstream.
      
      Starting with GCC 12.1, the created .gcda format can't be read by gcov
      tool.  There are 2 significant changes to the .gcda file format that
      need to be supported:
      
      a) [gcov: Use system IO buffering]
         (23eb66d1d46a34cb28c4acbdf8a1deb80a7c5a05) changed that all sizes in
         the format are in bytes and not in words (4B)
      
      b) [gcov: make profile merging smarter]
         (72e0c742bd01f8e7e6dcca64042b9ad7e75979de) add a new checksum to the
         file header.
      
      Tested with GCC 7.5, 10.4, 12.2 and the current master.
      
      Link: https://lkml.kernel.org/r/624bda92-f307-30e9-9aaa-8cc678b2dfb2@suse.cz
      Signed-off-by: default avatarMartin Liska <mliska@suse.cz>
      Tested-by: default avatarPeter Oberparleiter <oberpar@linux.ibm.com>
      Reviewed-by: default avatarPeter Oberparleiter <oberpar@linux.ibm.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      02eb4402
    • Rafael J. Wysocki's avatar
      thermal: intel_powerclamp: Use first online CPU as control_cpu · a83ed01f
      Rafael J. Wysocki authored
      commit 4bb7f6c2 upstream.
      
      Commit 68b99e94 ("thermal: intel_powerclamp: Use get_cpu() instead
      of smp_processor_id() to avoid crash") fixed an issue related to using
      smp_processor_id() in preemptible context by replacing it with a pair
      of get_cpu()/put_cpu(), but what is needed there really is any online
      CPU and not necessarily the one currently running the code.  Arguably,
      getting the one that's running the code in there is confusing.
      
      For this reason, simply give the control CPU role to the first online
      one which automatically will be CPU0 if it is online, so one check
      can be dropped from the code for an added benefit.
      
      Link: https://lore.kernel.org/linux-pm/20221011113646.GA12080@duo.ucw.cz/
      Fixes: 68b99e94
      
       ("thermal: intel_powerclamp: Use get_cpu() instead of smp_processor_id() to avoid crash")
      Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
      Reviewed-by: default avatarChen Yu <yu.c.chen@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a83ed01f
    • Eric Dumazet's avatar
      inet: fully convert sk->sk_rx_dst to RCU rules · 68c34ce1
      Eric Dumazet authored
      commit 8f905c0e upstream.
      
      syzbot reported various issues around early demux,
      one being included in this changelog [1]
      
      sk->sk_rx_dst is using RCU protection without clearly
      documenting it.
      
      And following sequences in tcp_v4_do_rcv()/tcp_v6_do_rcv()
      are not following standard RCU rules.
      
      [a]    dst_release(dst);
      [b]    sk->sk_rx_dst = NULL;
      
      They look wrong because a delete operation of RCU protected
      pointer is supposed to clear the pointer before
      the call_rcu()/synchronize_rcu() guarding actual memory freeing.
      
      In some cases indeed, dst could be freed before [b] is done.
      
      We could cheat by clearing sk_rx_dst before calling
      dst_release(), but this seems the right time to stick
      to standard RCU annotations and debugging facilities.
      
      [1]
      BUG: KASAN: use-after-free in dst_check include/net/dst.h:470 [inline]
      BUG: KASAN: use-after-free in tcp_v4_early_demux+0x95b/0x960 net/ipv4/tcp_ipv4.c:1792
      Read of size 2 at addr ffff88807f1cb73a by task syz-executor.5/9204
      
      CPU: 0 PID: 9204 Comm: syz-executor.5 Not tainted 5.16.0-rc5-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
       print_address_description.constprop.0.cold+0x8d/0x320 mm/kasan/report.c:247
       __kasan_report mm/kasan/report.c:433 [inline]
       kasan_report.cold+0x83/0xdf mm/kasan/report.c:450
       dst_check include/net/dst.h:470 [inline]
       tcp_v4_early_demux+0x95b/0x960 net/ipv4/tcp_ipv4.c:1792
       ip_rcv_finish_core.constprop.0+0x15de/0x1e80 net/ipv4/ip_input.c:340
       ip_list_rcv_finish.constprop.0+0x1b2/0x6e0 net/ipv4/ip_input.c:583
       ip_sublist_rcv net/ipv4/ip_input.c:609 [inline]
       ip_list_rcv+0x34e/0x490 net/ipv4/ip_input.c:644
       __netif_receive_skb_list_ptype net/core/dev.c:5508 [inline]
       __netif_receive_skb_list_core+0x549/0x8e0 net/core/dev.c:5556
       __netif_receive_skb_list net/core/dev.c:5608 [inline]
       netif_receive_skb_list_internal+0x75e/0xd80 net/core/dev.c:5699
       gro_normal_list net/core/dev.c:5853 [inline]
       gro_normal_list net/core/dev.c:5849 [inline]
       napi_complete_done+0x1f1/0x880 net/core/dev.c:6590
       virtqueue_napi_complete drivers/net/virtio_net.c:339 [inline]
       virtnet_poll+0xca2/0x11b0 drivers/net/virtio_net.c:1557
       __napi_poll+0xaf/0x440 net/core/dev.c:7023
       napi_poll net/core/dev.c:7090 [inline]
       net_rx_action+0x801/0xb40 net/core/dev.c:7177
       __do_softirq+0x29b/0x9c2 kernel/softirq.c:558
       invoke_softirq kernel/softirq.c:432 [inline]
       __irq_exit_rcu+0x123/0x180 kernel/softirq.c:637
       irq_exit_rcu+0x5/0x20 kernel/softirq.c:649
       common_interrupt+0x52/0xc0 arch/x86/kernel/irq.c:240
       asm_common_interrupt+0x1e/0x40 arch/x86/include/asm/idtentry.h:629
      RIP: 0033:0x7f5e972bfd57
      Code: 39 d1 73 14 0f 1f 80 00 00 00 00 48 8b 50 f8 48 83 e8 08 48 39 ca 77 f3 48 39 c3 73 3e 48 89 13 48 8b 50 f8 48 89 38 49 8b 0e <48> 8b 3e 48 83 c3 08 48 83 c6 08 eb bc 48 39 d1 72 9e 48 39 d0 73
      RSP: 002b:00007fff8a413210 EFLAGS: 00000283
      RAX: 00007f5e97108990 RBX: 00007f5e97108338 RCX: ffffffff81d3aa45
      RDX: ffffffff81d3aa45 RSI: 00007f5e97108340 RDI: ffffffff81d3aa45
      RBP: 00007f5e97107eb8 R08: 00007f5e97108d88 R09: 0000000093c2e8d9
      R10: 0000000000000000 R11: 0000000000000000 R12: 00007f5e97107eb0
      R13: 00007f5e97108338 R14: 00007f5e97107ea8 R15: 0000000000000019
       </TASK>
      
      Allocated by task 13:
       kasan_save_stack+0x1e/0x50 mm/kasan/common.c:38
       kasan_set_track mm/kasan/common.c:46 [inline]
       set_alloc_info mm/kasan/common.c:434 [inline]
       __kasan_slab_alloc+0x90/0xc0 mm/kasan/common.c:467
       kasan_slab_alloc include/linux/kasan.h:259 [inline]
       slab_post_alloc_hook mm/slab.h:519 [inline]
       slab_alloc_node mm/slub.c:3234 [inline]
       slab_alloc mm/slub.c:3242 [inline]
       kmem_cache_alloc+0x202/0x3a0 mm/slub.c:3247
       dst_alloc+0x146/0x1f0 net/core/dst.c:92
       rt_dst_alloc+0x73/0x430 net/ipv4/route.c:1613
       ip_route_input_slow+0x1817/0x3a20 net/ipv4/route.c:2340
       ip_route_input_rcu net/ipv4/route.c:2470 [inline]
       ip_route_input_noref+0x116/0x2a0 net/ipv4/route.c:2415
       ip_rcv_finish_core.constprop.0+0x288/0x1e80 net/ipv4/ip_input.c:354
       ip_list_rcv_finish.constprop.0+0x1b2/0x6e0 net/ipv4/ip_input.c:583
       ip_sublist_rcv net/ipv4/ip_input.c:609 [inline]
       ip_list_rcv+0x34e/0x490 net/ipv4/ip_input.c:644
       __netif_receive_skb_list_ptype net/core/dev.c:5508 [inline]
       __netif_receive_skb_list_core+0x549/0x8e0 net/core/dev.c:5556
       __netif_receive_skb_list net/core/dev.c:5608 [inline]
       netif_receive_skb_list_internal+0x75e/0xd80 net/core/dev.c:5699
       gro_normal_list net/core/dev.c:5853 [inline]
       gro_normal_list net/core/dev.c:5849 [inline]
       napi_complete_done+0x1f1/0x880 net/core/dev.c:6590
       virtqueue_napi_complete drivers/net/virtio_net.c:339 [inline]
       virtnet_poll+0xca2/0x11b0 drivers/net/virtio_net.c:1557
       __napi_poll+0xaf/0x440 net/core/dev.c:7023
       napi_poll net/core/dev.c:7090 [inline]
       net_rx_action+0x801/0xb40 net/core/dev.c:7177
       __do_softirq+0x29b/0x9c2 kernel/softirq.c:558
      
      Freed by task 13:
       kasan_save_stack+0x1e/0x50 mm/kasan/common.c:38
       kasan_set_track+0x21/0x30 mm/kasan/common.c:46
       kasan_set_free_info+0x20/0x30 mm/kasan/generic.c:370
       ____kasan_slab_free mm/kasan/common.c:366 [inline]
       ____kasan_slab_free mm/kasan/common.c:328 [inline]
       __kasan_slab_free+0xff/0x130 mm/kasan/common.c:374
       kasan_slab_free include/linux/kasan.h:235 [inline]
       slab_free_hook mm/slub.c:1723 [inline]
       slab_free_freelist_hook+0x8b/0x1c0 mm/slub.c:1749
       slab_free mm/slub.c:3513 [inline]
       kmem_cache_free+0xbd/0x5d0 mm/slub.c:3530
       dst_destroy+0x2d6/0x3f0 net/core/dst.c:127
       rcu_do_batch kernel/rcu/tree.c:2506 [inline]
       rcu_core+0x7ab/0x1470 kernel/rcu/tree.c:2741
       __do_softirq+0x29b/0x9c2 kernel/softirq.c:558
      
      Last potentially related work creation:
       kasan_save_stack+0x1e/0x50 mm/kasan/common.c:38
       __kasan_record_aux_stack+0xf5/0x120 mm/kasan/generic.c:348
       __call_rcu kernel/rcu/tree.c:2985 [inline]
       call_rcu+0xb1/0x740 kernel/rcu/tree.c:3065
       dst_release net/core/dst.c:177 [inline]
       dst_release+0x79/0xe0 net/core/dst.c:167
       tcp_v4_do_rcv+0x612/0x8d0 net/ipv4/tcp_ipv4.c:1712
       sk_backlog_rcv include/net/sock.h:1030 [inline]
       __release_sock+0x134/0x3b0 net/core/sock.c:2768
       release_sock+0x54/0x1b0 net/core/sock.c:3300
       tcp_sendmsg+0x36/0x40 net/ipv4/tcp.c:1441
       inet_sendmsg+0x99/0xe0 net/ipv4/af_inet.c:819
       sock_sendmsg_nosec net/socket.c:704 [inline]
       sock_sendmsg+0xcf/0x120 net/socket.c:724
       sock_write_iter+0x289/0x3c0 net/socket.c:1057
       call_write_iter include/linux/fs.h:2162 [inline]
       new_sync_write+0x429/0x660 fs/read_write.c:503
       vfs_write+0x7cd/0xae0 fs/read_write.c:590
       ksys_write+0x1ee/0x250 fs/read_write.c:643
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      The buggy address belongs to the object at ffff88807f1cb700
       which belongs to the cache ip_dst_cache of size 176
      The buggy address is located 58 bytes inside of
       176-byte region [ffff88807f1cb700, ffff88807f1cb7b0)
      The buggy address belongs to the page:
      page:ffffea0001fc72c0 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x7f1cb
      flags: 0xfff00000000200(slab|node=0|zone=1|lastcpupid=0x7ff)
      raw: 00fff00000000200 dead000000000100 dead000000000122 ffff8881413bb780
      raw: 0000000000000000 0000000000100010 00000001ffffffff 0000000000000000
      page dumped because: kasan: bad access detected
      page_owner tracks the page as allocated
      page last allocated via order 0, migratetype Unmovable, gfp_mask 0x112a20(GFP_ATOMIC|__GFP_NOWARN|__GFP_NORETRY|__GFP_HARDWALL), pid 5, ts 108466983062, free_ts 108048976062
       prep_new_page mm/page_alloc.c:2418 [inline]
       get_page_from_freelist+0xa72/0x2f50 mm/page_alloc.c:4149
       __alloc_pages+0x1b2/0x500 mm/page_alloc.c:5369
       alloc_pages+0x1a7/0x300 mm/mempolicy.c:2191
       alloc_slab_page mm/slub.c:1793 [inline]
       allocate_slab mm/slub.c:1930 [inline]
       new_slab+0x32d/0x4a0 mm/slub.c:1993
       ___slab_alloc+0x918/0xfe0 mm/slub.c:3022
       __slab_alloc.constprop.0+0x4d/0xa0 mm/slub.c:3109
       slab_alloc_node mm/slub.c:3200 [inline]
       slab_alloc mm/slub.c:3242 [inline]
       kmem_cache_alloc+0x35c/0x3a0 mm/slub.c:3247
       dst_alloc+0x146/0x1f0 net/core/dst.c:92
       rt_dst_alloc+0x73/0x430 net/ipv4/route.c:1613
       __mkroute_output net/ipv4/route.c:2564 [inline]
       ip_route_output_key_hash_rcu+0x921/0x2d00 net/ipv4/route.c:2791
       ip_route_output_key_hash+0x18b/0x300 net/ipv4/route.c:2619
       __ip_route_output_key include/net/route.h:126 [inline]
       ip_route_output_flow+0x23/0x150 net/ipv4/route.c:2850
       ip_route_output_key include/net/route.h:142 [inline]
       geneve_get_v4_rt+0x3a6/0x830 drivers/net/geneve.c:809
       geneve_xmit_skb drivers/net/geneve.c:899 [inline]
       geneve_xmit+0xc4a/0x3540 drivers/net/geneve.c:1082
       __netdev_start_xmit include/linux/netdevice.h:4994 [inline]
       netdev_start_xmit include/linux/netdevice.h:5008 [inline]
       xmit_one net/core/dev.c:3590 [inline]
       dev_hard_start_xmit+0x1eb/0x920 net/core/dev.c:3606
       __dev_queue_xmit+0x299a/0x3650 net/core/dev.c:4229
      page last free stack trace:
       reset_page_owner include/linux/page_owner.h:24 [inline]
       free_pages_prepare mm/page_alloc.c:1338 [inline]
       free_pcp_prepare+0x374/0x870 mm/page_alloc.c:1389
       free_unref_page_prepare mm/page_alloc.c:3309 [inline]
       free_unref_page+0x19/0x690 mm/page_alloc.c:3388
       qlink_free mm/kasan/quarantine.c:146 [inline]
       qlist_free_all+0x5a/0xc0 mm/kasan/quarantine.c:165
       kasan_quarantine_reduce+0x180/0x200 mm/kasan/quarantine.c:272
       __kasan_slab_alloc+0xa2/0xc0 mm/kasan/common.c:444
       kasan_slab_alloc include/linux/kasan.h:259 [inline]
       slab_post_alloc_hook mm/slab.h:519 [inline]
       slab_alloc_node mm/slub.c:3234 [inline]
       kmem_cache_alloc_node+0x255/0x3f0 mm/slub.c:3270
       __alloc_skb+0x215/0x340 net/core/skbuff.c:414
       alloc_skb include/linux/skbuff.h:1126 [inline]
       alloc_skb_with_frags+0x93/0x620 net/core/skbuff.c:6078
       sock_alloc_send_pskb+0x783/0x910 net/core/sock.c:2575
       mld_newpack+0x1df/0x770 net/ipv6/mcast.c:1754
       add_grhead+0x265/0x330 net/ipv6/mcast.c:1857
       add_grec+0x1053/0x14e0 net/ipv6/mcast.c:1995
       mld_send_initial_cr.part.0+0xf6/0x230 net/ipv6/mcast.c:2242
       mld_send_initial_cr net/ipv6/mcast.c:1232 [inline]
       mld_dad_work+0x1d3/0x690 net/ipv6/mcast.c:2268
       process_one_work+0x9b2/0x1690 kernel/workqueue.c:2298
       worker_thread+0x658/0x11f0 kernel/workqueue.c:2445
      
      Memory state around the buggy address:
       ffff88807f1cb600: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
       ffff88807f1cb680: fb fb fb fb fb fb fc fc fc fc fc fc fc fc fc fc
      >ffff88807f1cb700: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                              ^
       ffff88807f1cb780: fb fb fb fb fb fb fc fc fc fc fc fc fc fc fc fc
       ffff88807f1cb800: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      
      Fixes: 41063e9d
      
       ("ipv4: Early TCP socket demux.")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20211220143330.680945-1-eric.dumazet@gmail.com
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      [cmllamas: backported to 4.9; dropped irrelevant hunks in ipv6/udp.c;
       added rcu_access_pointer(sk->sk_rx_dst) in tcp_prequeue().]
      Signed-off-by: default avatarCarlos Llamas <cmllamas@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      68c34ce1
    • Jerry Lee 李修賢's avatar
      ext4: continue to expand file system when the target size doesn't reach · b6f5ec5e
      Jerry Lee 李修賢 authored
      commit df3cb754
      
       upstream.
      
      When expanding a file system from (16TiB-2MiB) to 18TiB, the operation
      exits early which leads to result inconsistency between resize2fs and
      Ext4 kernel driver.
      
      === before ===
      ○ → resize2fs /dev/mapper/thin
      resize2fs 1.45.5 (07-Jan-2020)
      Filesystem at /dev/mapper/thin is mounted on /mnt/test; on-line resizing required
      old_desc_blocks = 2048, new_desc_blocks = 2304
      The filesystem on /dev/mapper/thin is now 4831837696 (4k) blocks long.
      
      [  865.186308] EXT4-fs (dm-5): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
      [  912.091502] dm-4: detected capacity change from 34359738368 to 38654705664
      [  970.030550] dm-5: detected capacity change from 34359734272 to 38654701568
      [ 1000.012751] EXT4-fs (dm-5): resizing filesystem from 4294966784 to 4831837696 blocks
      [ 1000.012878] EXT4-fs (dm-5): resized filesystem to 4294967296
      
      === after ===
      [  129.104898] EXT4-fs (dm-5): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
      [  143.773630] dm-4: detected capacity change from 34359738368 to 38654705664
      [  198.203246] dm-5: detected capacity change from 34359734272 to 38654701568
      [  207.918603] EXT4-fs (dm-5): resizing filesystem from 4294966784 to 4831837696 blocks
      [  207.918754] EXT4-fs (dm-5): resizing filesystem from 4294967296 to 4831837696 blocks
      [  207.918758] EXT4-fs (dm-5): Converting file system to meta_bg
      [  207.918790] EXT4-fs (dm-5): resizing filesystem from 4294967296 to 4831837696 blocks
      [  221.454050] EXT4-fs (dm-5): resized to 4658298880 blocks
      [  227.634613] EXT4-fs (dm-5): resized filesystem to 4831837696
      
      Signed-off-by: default avatarJerry Lee <jerrylee@qnap.com>
      Link: https://lore.kernel.org/r/PU1PR04MB22635E739BD21150DC182AC6A18C9@PU1PR04MB2263.apcprd04.prod.outlook.com
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b6f5ec5e
    • Tetsuo Handa's avatar
      net/ieee802154: don't warn zero-sized raw_sendmsg() · b22801fe
      Tetsuo Handa authored
      [ Upstream commit b12e924a ]
      
      syzbot is hitting skb_assert_len() warning at __dev_queue_xmit() [1],
      for PF_IEEE802154 socket's zero-sized raw_sendmsg() request is hitting
      __dev_queue_xmit() with skb->len == 0.
      
      Since PF_IEEE802154 socket's zero-sized raw_sendmsg() request was
      able to return 0, don't call __dev_queue_xmit() if packet length is 0.
      
        ----------
        #include <sys/socket.h>
        #include <netinet/in.h>
      
        int main(int argc, char *argv[])
        {
          struct sockaddr_in addr = { .sin_family = AF_INET, .sin_addr.s_addr = htonl(INADDR_LOOPBACK) };
          struct iovec iov = { };
          struct msghdr hdr = { .msg_name = &addr, .msg_namelen = sizeof(addr), .msg_iov = &iov, .msg_iovlen = 1 };
          sendmsg(socket(PF_IEEE802154, SOCK_RAW, 0), &hdr, 0);
          return 0;
        }
        ----------
      
      Note that this might be a sign that commit fd189422
      
       ("bpf: Don't
      redirect packets with invalid pkt_len") should be reverted, for
      skb->len == 0 was acceptable for at least PF_IEEE802154 socket.
      
      Link: https://syzkaller.appspot.com/bug?extid=5ea725c25d06fb9114c4 [1]
      Reported-by: default avatarsyzbot <syzbot+5ea725c25d06fb9114c4@syzkaller.appspotmail.com>
      Fixes: fd189422
      
       ("bpf: Don't redirect packets with invalid pkt_len")
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Link: https://lore.kernel.org/r/20221005014750.3685555-2-aahringo@redhat.com
      Signed-off-by: default avatarStefan Schmidt <stefan@datenfreihafen.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b22801fe
    • Alexander Aring's avatar
      net: ieee802154: return -EINVAL for unknown addr type · 33908a3c
      Alexander Aring authored
      commit 30393181 upstream.
      
      This patch adds handling to return -EINVAL for an unknown addr type. The
      current behaviour is to return 0 as successful but the size of an
      unknown addr type is not defined and should return an error like -EINVAL.
      
      Fixes: 94160108
      
       ("net/ieee802154: fix uninit value bug in dgram_sendmsg")
      Signed-off-by: default avatarAlexander Aring <aahringo@redhat.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      33908a3c
    • Adrian Hunter's avatar
      perf intel-pt: Fix segfault in intel_pt_print_info() with uClibc · 41aeefb7
      Adrian Hunter authored
      commit 5a3d4707 upstream.
      
      uClibc segfaulted because NULL was passed as the format to fprintf().
      
      That happened because one of the format strings was missing and
      intel_pt_print_info() didn't check that before calling fprintf().
      
      Add the missing format string, and check format is not NULL before calling
      fprintf().
      
      Fixes: 11fa7cb8
      
       ("perf tools: Pass Intel PT information for decoding MTC and CYC")
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20221012082259.22394-2-adrian.hunter@intel.com
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      41aeefb7
    • Dongliang Mu's avatar
      usb: idmouse: fix an uninit-value in idmouse_open · b3304a6d
      Dongliang Mu authored
      [ Upstream commit bce2b053
      
       ]
      
      In idmouse_create_image, if any ftip_command fails, it will
      go to the reset label. However, this leads to the data in
      bulk_in_buffer[HEADER..IMGSIZE] uninitialized. And the check
      for valid image incurs an uninitialized dereference.
      
      Fix this by moving the check before reset label since this
      check only be valid if the data after bulk_in_buffer[HEADER]
      has concrete data.
      
      Note that this is found by KMSAN, so only kernel compilation
      is tested.
      
      Reported-by: default avatar <syzbot+79832d33eb89fb3cd092@syzkaller.appspotmail.com>
      Signed-off-by: default avatarDongliang Mu <mudongliangabcd@gmail.com>
      Link: https://lore.kernel.org/r/20220922134847.1101921-1-dzm91@hust.edu.cn
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      b3304a6d
    • sunghwan jung's avatar
      Revert "usb: storage: Add quirk for Samsung Fit flash" · 7f214204
      sunghwan jung authored
      [ Upstream commit ad5dbfc1 ]
      
      This reverts commit 86d92f54
      
      ,
      which fix the timeout issue for "Samsung Fit Flash".
      
      But the commit affects not only "Samsung Fit Flash" but also other usb
      storages that use the same controller and causes severe performance
      regression.
      
       # hdparm -t /dev/sda (without the quirk)
       Timing buffered disk reads: 622 MB in  3.01 seconds = 206.66 MB/sec
      
       # hdparm -t /dev/sda (with the quirk)
       Timing buffered disk reads: 220 MB in  3.00 seconds =  73.32 MB/sec
      
      The commit author mentioned that "Issue was reproduced after device has
      bad block", so this quirk should be applied when we have the timeout
      issue with a device that has bad blocks.
      
      We revert the commit so that we apply this quirk by adding kernel
      paramters using a bootloader or other ways when we really need it,
      without the performance regression with devices that don't have the
      issue.
      
      Signed-off-by: default avatarsunghwan jung <onenowy@gmail.com>
      Link: https://lore.kernel.org/r/20220913114913.3073-1-onenowy@gmail.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7f214204
    • Robin Guo's avatar
      usb: musb: Fix musb_gadget.c rxstate overflow bug · 826f84ab
      Robin Guo authored
      [ Upstream commit eea4c860
      
       ]
      
      The usb function device call musb_gadget_queue() adds the passed
      request to musb_ep::req_list,If the (request->length > musb_ep->packet_sz)
      and (is_buffer_mapped(req) return false),the rxstate() will copy all data
      in fifo to request->buf which may cause request->buf out of bounds.
      
      Fix it by add the length check :
      fifocnt = min_t(unsigned, request->length - request->actual, fifocnt);
      
      Signed-off-by: default avatarRobin Guo <guoweibin@inspur.com>
      Link: https://lore.kernel.org/r/20220906102119.1b071d07a8391ff115e6d1ef@inspur.com
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      826f84ab