Skip to content
Snippets Groups Projects
  1. Jun 13, 2022
  2. Jun 10, 2022
    • Ye Bin's avatar
      ext4: fix super block checksum incorrect after mount · 66c23043
      Ye Bin authored
      hulk inclusion
      category: bugfix
      bugzilla: 186927, https://gitee.com/openeuler/kernel/issues/I5BMSA
      
      
      CVE: NA
      
      ---------------------------
      
      We got issue as follows:
      [home]# mount  /dev/sda  test
      EXT4-fs (sda): warning: mounting fs with errors, running e2fsck is recommended
      [home]# dmesg
      EXT4-fs (sda): warning: mounting fs with errors, running e2fsck is recommended
      EXT4-fs (sda): Errors on filesystem, clearing orphan list.
      EXT4-fs (sda): recovery complete
      EXT4-fs (sda): mounted filesystem with ordered data mode. Quota mode: none.
      [home]# debugfs /dev/sda
      debugfs 1.46.5 (30-Dec-2021)
      Checksum errors in superblock!  Retrying...
      
      Reason is ext4_orphan_cleanup will reset ‘s_last_orphan’ but not update
      super block checksum.
      To solve above issue, defer update super block checksum after ext4_orphan_cleanup.
      
      Signed-off-by: default avatarYe Bin <yebin10@huawei.com>
      Reviewed-by: default avatarZhang Yi <yi.zhang@huawei.com>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      66c23043
  3. Jun 08, 2022
  4. Jun 02, 2022
    • Nicolas Dichtel's avatar
      ping: fix address binding wrt vrf · f760088b
      Nicolas Dichtel authored
      stable inclusion
      from stable-4.19.244
      commit 0b8ef640736f8fba36df29543cdd5ef7304aea45
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit e1a7ac6f3ba6e157adcd0ca94d92a401f1943f56 upstream.
      
      When ping_group_range is updated, 'ping' uses the DGRAM ICMP socket,
      instead of an IP raw socket. In this case, 'ping' is unable to bind its
      socket to a local address owned by a vrflite.
      
      Before the patch:
      $ sysctl -w net.ipv4.ping_group_range='0  2147483647'
      $ ip link add blue type vrf table 10
      $ ip link add foo type dummy
      $ ip link set foo master blue
      $ ip link set foo up
      $ ip addr add 192.168.1.1/24 dev foo
      $ ip addr add 2001::1/64 dev foo
      $ ip vrf exec blue ping -c1 -I 192.168.1.1 192.168.1.2
      ping: bind: Cannot assign requested address
      $ ip vrf exec blue ping6 -c1 -I 2001::1 2001::2
      ping6: bind icmp socket: Cannot assign requested address
      
      CC: stable@vger.kernel.org
      Fixes: 1b69c6d0 ("net: Introduce L3 Master device abstraction")
      Signed-off-by: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarNicolas Dichtel <nicolas.dichtel@6wind.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
    • Eric Dumazet's avatar
      tcp: resalt the secret every 10 seconds · 15668390
      Eric Dumazet authored
      stable inclusion
      from stable-4.19.244
      commit abcf4e1277d169b82dd7ee290006487ed16016ce
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit 4dfa9b438ee34caca4e6a4e5e961641807367f6f ]
      
      In order to limit the ability for an observer to recognize the source
      ports sequence used to contact a set of destinations, we should
      periodically shuffle the secret. 10 seconds looks effective enough
      without causing particular issues.
      
      Cc: Moshe Kol <moshe.kol@mail.huji.ac.il>
      Cc: Yossi Gilad <yossi.gilad@mail.huji.ac.il>
      Cc: Amit Klein <aksecurity@gmail.com>
      Cc: Jason A. Donenfeld <Jason@zx2c4.com>
      Tested-by: default avatarWilly Tarreau <w@1wt.eu>
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      15668390
    • Eric Dumazet's avatar
      netlink: do not reset transport header in netlink_recvmsg() · 9c539bc1
      Eric Dumazet authored
      stable inclusion
      from stable-4.19.244
      commit 239e827e360ed831a193fd7006670b5cc13670ba
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit d5076fe4049cadef1f040eda4aaa001bb5424225 ]
      
      netlink_recvmsg() does not need to change transport header.
      
      If transport header was needed, it should have been reset
      by the producer (netlink_dump()), not the consumer(s).
      
      The following trace probably happened when multiple threads
      were using MSG_PEEK.
      
      BUG: KCSAN: data-race in netlink_recvmsg / netlink_recvmsg
      
      write to 0xffff88811e9f15b2 of 2 bytes by task 32012 on cpu 1:
       skb_reset_transport_header include/linux/skbuff.h:2760 [inline]
       netlink_recvmsg+0x1de/0x790 net/netlink/af_netlink.c:1978
       sock_recvmsg_nosec net/socket.c:948 [inline]
       sock_recvmsg net/socket.c:966 [inline]
       __sys_recvfrom+0x204/0x2c0 net/socket.c:2097
       __do_sys_recvfrom net/socket.c:2115 [inline]
       __se_sys_recvfrom net/socket.c:2111 [inline]
       __x64_sys_recvfrom+0x74/0x90 net/socket.c:2111
       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+0x44/0xae
      
      write to 0xffff88811e9f15b2 of 2 bytes by task 32005 on cpu 0:
       skb_reset_transport_header include/linux/skbuff.h:2760 [inline]
       netlink_recvmsg+0x1de/0x790 net/netlink/af_netlink.c:1978
       ____sys_recvmsg+0x162/0x2f0
       ___sys_recvmsg net/socket.c:2674 [inline]
       __sys_recvmsg+0x209/0x3f0 net/socket.c:2704
       __do_sys_recvmsg net/socket.c:2714 [inline]
       __se_sys_recvmsg net/socket.c:2711 [inline]
       __x64_sys_recvmsg+0x42/0x50 net/socket.c:2711
       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+0x44/0xae
      
      value changed: 0xffff -> 0x0000
      
      Reported by Kernel Concurrency Sanitizer on:
      CPU: 0 PID: 32005 Comm: syz-executor.4 Not tainted 5.18.0-rc1-syzkaller-00328-ge1f700ebd6be-dirty #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      
      Fixes: 1da177e4 ("Linux-2.6.12-rc2")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Link: https://lore.kernel.org/r/20220505161946.2867638-1-eric.dumazet@gmail.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      9c539bc1
    • Lokesh Dhoundiyal's avatar
      ipv4: drop dst in multicast routing path · 49a2f523
      Lokesh Dhoundiyal authored
      stable inclusion
      from stable-4.19.244
      commit 3ae8707584882fe4f9e860326a810657a718158b
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit 9e6c6d17d1d6a3f1515ce399f9a011629ec79aa0 ]
      
      kmemleak reports the following when routing multicast traffic over an
      ipsec tunnel.
      
      Kmemleak output:
      unreferenced object 0x8000000044bebb00 (size 256):
        comm "softirq", pid 0, jiffies 4294985356 (age 126.810s)
        hex dump (first 32 bytes):
          00 00 00 00 00 00 00 00 80 00 00 00 05 13 74 80  ..............t.
          80 00 00 00 04 9b bf f9 00 00 00 00 00 00 00 00  ................
        backtrace:
          [<00000000f83947e0>] __kmalloc+0x1e8/0x300
          [<00000000b7ed8dca>] metadata_dst_alloc+0x24/0x58
          [<0000000081d32c20>] __ipgre_rcv+0x100/0x2b8
          [<00000000824f6cf1>] gre_rcv+0x178/0x540
          [<00000000ccd4e162>] gre_rcv+0x7c/0xd8
          [<00000000c024b148>] ip_protocol_deliver_rcu+0x124/0x350
          [<000000006a483377>] ip_local_deliver_finish+0x54/0x68
          [<00000000d9271b3a>] ip_local_deliver+0x128/0x168
          [<00000000bd4968ae>] xfrm_trans_reinject+0xb8/0xf8
          [<0000000071672a19>] tasklet_action_common.isra.16+0xc4/0x1b0
          [<0000000062e9c336>] __do_softirq+0x1fc/0x3e0
          [<00000000013d7914>] irq_exit+0xc4/0xe0
          [<00000000a4d73e90>] plat_irq_dispatch+0x7c/0x108
          [<000000000751eb8e>] handle_int+0x16c/0x178
          [<000000001668023b>] _raw_spin_unlock_irqrestore+0x1c/0x28
      
      The metadata dst is leaked when ip_route_input_mc() updates the dst for
      the skb. Commit f38a9eb1 ("dst: Metadata destinations") correctly
      handled dropping the dst in ip_route_input_slow() but missed the
      multicast case which is handled by ip_route_input_mc(). Drop the dst in
      ip_route_input_mc() avoiding the leak.
      
      Fixes: f38a9eb1 ("dst: Metadata destinations")
      Signed-off-by: default avatarLokesh Dhoundiyal <lokesh.dhoundiyal@alliedtelesis.co.nz>
      Signed-off-by: default avatarChris Packham <chris.packham@alliedtelesis.co.nz>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Link: https://lore.kernel.org/r/20220505020017.3111846-1-chris.packham@alliedtelesis.co.nz
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      49a2f523
    • Tariq Toukan's avatar
      net: Fix features skip in for_each_netdev_feature() · b5122289
      Tariq Toukan authored
      stable inclusion
      from stable-4.19.244
      commit 48fed355543418c34de4b521365f438041523a1d
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit 85db6352fc8a158a893151baa1716463d34a20d0 ]
      
      The find_next_netdev_feature() macro gets the "remaining length",
      not bit index.
      Passing "bit - 1" for the following iteration is wrong as it skips
      the adjacent bit. Pass "bit" instead.
      
      Fixes: 3b89ea9c ("net: Fix for_each_netdev_feature on Big endian")
      Signed-off-by: default avatarTariq Toukan <tariqt@nvidia.com>
      Reviewed-by: default avatarGal Pressman <gal@nvidia.com>
      Link: https://lore.kernel.org/r/20220504080914.1918-1-tariqt@nvidia.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      b5122289
    • ChenXiaoSong's avatar
      VFS: Fix memory leak caused by concurrently mounting fs with subtype · eed7081d
      ChenXiaoSong authored
      stable inclusion
      from stable-4.19.243
      commit 8033f109be4a1d5b466284e8ab9119c04f2a334b
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      CVE: NA
      
      --------------------------------
      
      If two processes mount same superblock, memory leak occurs:
      
      CPU0               |  CPU1
      do_new_mount       |  do_new_mount
        fs_set_subtype   |    fs_set_subtype
          kstrdup        |
                         |      kstrdup
          memrory leak   |
      
      The following reproducer triggers the problem:
      
      1. shell command: mount -t ntfs /dev/sda1 /mnt &
      2. c program: mount("/dev/sda1", "/mnt", "fuseblk", 0, "...")
      
      with kmemleak report being along the lines of
      
      unreferenced object 0xffff888235f1a5c0 (size 8):
        comm "mount.ntfs", pid 2860, jiffies 4295757824 (age 43.423s)
        hex dump (first 8 bytes):
          00 a5 f1 35 82 88 ff ff                          ...5....
        backtrace:
          [<00000000656e30cc>] __kmalloc_track_caller+0x16e/0x430
          [<000000008e591727>] kstrdup+0x3e/0x90
          [<000000008430d12b>] do_mount.cold+0x7b/0xd9
          [<0000000078d639cd>] ksys_mount+0xb2/0x150
          [<000000006015988d>] __x64_sys_mount+0x29/0x40
          [<00000000e0a7c118>] do_syscall_64+0xc1/0x1d0
          [<00000000bcea7df5>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
          [<00000000803a4067>] 0xffffffffffffffff
      
      Linus's tree already have refactoring patchset [1], one of them can fix this bug:
              c30da2e9 ("fuse: convert to use the new mount API")
      After refactoring, init super_block->s_subtype in fuse_fill_super.
      
      Since we did not merge the refactoring patchset in this branch, I create this patch.
      This patch fix this by adding a write lock while calling fs_set_subtype.
      
      [1] https://patchwork.kernel.org/project/linux-fsdevel/patch/20190903113640.7984-3-mszeredi@redhat.com/
      
      
      
      Fixes: 79c0b2df ("add filesystem subtype support")
      Cc: David Howells <dhowells@redhat.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarChenXiaoSong <chenxiaosong2@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      eed7081d
    • Muchun Song's avatar
      mm: userfaultfd: fix missing cache flush in mcopy_atomic_pte() and __mcopy_atomic() · f9476fc0
      Muchun Song authored
      stable inclusion
      from stable-4.19.243
      commit 259dfb503b8f4087898403faf0e76dcb8d232e3d
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      CVE: NA
      
      --------------------------------
      
      commit 7c25a0b89a487878b0691e6524fb5a8827322194 upstream.
      
      userfaultfd calls mcopy_atomic_pte() and __mcopy_atomic() which do not
      do any cache flushing for the target page.  Then the target page will be
      mapped to the user space with a different address (user address), which
      might have an alias issue with the kernel address used to copy the data
      from the user to.  Fix this by insert flush_dcache_page() after
      copy_from_user() succeeds.
      
      Link: https://lkml.kernel.org/r/20220210123058.79206-7-songmuchun@bytedance.com
      
      
      Fixes: b6ebaedb ("userfaultfd: avoid mmap_sem read recursion in mcopy_atomic")
      Fixes: c1a4de99 ("userfaultfd: mcopy_atomic|mfill_zeropage: UFFDIO_COPY|UFFDIO_ZEROPAGE preparation")
      Signed-off-by: default avatarMuchun Song <songmuchun@bytedance.com>
      Cc: Axel Rasmussen <axelrasmussen@google.com>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Fam Zheng <fam.zheng@bytedance.com>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Lars Persson <lars.persson@axis.com>
      Cc: Mike Kravetz <mike.kravetz@oracle.com>
      Cc: Peter Xu <peterx@redhat.com>
      Cc: Xiongchun Duan <duanxiongchun@bytedance.com>
      Cc: Zi Yan <ziy@nvidia.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      f9476fc0
    • Muchun Song's avatar
      mm: hugetlb: fix missing cache flush in copy_huge_page_from_user() · 47311f52
      Muchun Song authored
      stable inclusion
      from stable-4.19.243
      commit 5ca7aa4331009b08f9c81a6309ae5e69cd9011b2
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      CVE: NA
      
      --------------------------------
      
      commit e763243cc6cb1fcc720ec58cfd6e7c35ae90a479 upstream.
      
      userfaultfd calls copy_huge_page_from_user() which does not do any cache
      flushing for the target page.  Then the target page will be mapped to
      the user space with a different address (user address), which might have
      an alias issue with the kernel address used to copy the data from the
      user to.
      
      Fix this issue by flushing dcache in copy_huge_page_from_user().
      
      Link: https://lkml.kernel.org/r/20220210123058.79206-4-songmuchun@bytedance.com
      
      
      Fixes: fa4d75c1 ("userfaultfd: hugetlbfs: add copy_huge_page_from_user for hugetlb userfaultfd support")
      Signed-off-by: default avatarMuchun Song <songmuchun@bytedance.com>
      Reviewed-by: default avatarMike Kravetz <mike.kravetz@oracle.com>
      Cc: Axel Rasmussen <axelrasmussen@google.com>
      Cc: David Rientjes <rientjes@google.com>
      Cc: Fam Zheng <fam.zheng@bytedance.com>
      Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
      Cc: Lars Persson <lars.persson@axis.com>
      Cc: Peter Xu <peterx@redhat.com>
      Cc: Xiongchun Duan <duanxiongchun@bytedance.com>
      Cc: Zi Yan <ziy@nvidia.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      47311f52
    • Mike Snitzer's avatar
      dm: interlock pending dm_io and dm_wait_for_bios_completion · 8e62b0c3
      Mike Snitzer authored
      stable inclusion
      from stable-4.19.242
      commit b18fdfb00838594b669749e8f2f622c5df1e43ad
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit 9f6dc633761006f974701d4c88da71ab68670749 upstream.
      
      Commit d208b89401e0 ("dm: fix mempool NULL pointer race when
      completing IO") didn't go far enough.
      
      When bio_end_io_acct ends the count of in-flight I/Os may reach zero
      and the DM device may be suspended. There is a possibility that the
      suspend races with dm_stats_account_io.
      
      Fix this by adding percpu "pending_io" counters to track outstanding
      dm_io. Move kicking of suspend queue to dm_io_dec_pending(). Also,
      rename md_in_flight_bios() to dm_in_flight_bios() and update it to
      iterate all pending_io counters.
      
      Fixes: d208b89401e0 ("dm: fix mempool NULL pointer race when completing IO")
      Cc: stable@vger.kernel.org
      Co-developed-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Reviewed-by: default avatarMike Snitzer <snitzer@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      8e62b0c3
    • Jiazi Li's avatar
      dm: fix mempool NULL pointer race when completing IO · 1cc4f2e3
      Jiazi Li authored
      stable inclusion
      from stable-4.19.242
      commit 9e07272cca2ed76f7f6073f4444b1143828c8d87
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit d208b89401e073de986dc891037c5a668f5d5d95 upstream.
      
      dm_io_dec_pending() calls end_io_acct() first and will then dec md
      in-flight pending count. But if a task is swapping DM table at same
      time this can result in a crash due to mempool->elements being NULL:
      
      task1                             task2
      do_resume
       ->do_suspend
        ->dm_wait_for_completion
                                        bio_endio
      				   ->clone_endio
      				    ->dm_io_dec_pending
      				     ->end_io_acct
      				      ->wakeup task1
       ->dm_swap_table
        ->__bind
         ->__bind_mempools
          ->bioset_exit
           ->mempool_exit
                                           ->free_io
      
      [ 67.330330] Unable to handle kernel NULL pointer dereference at
      virtual address 0000000000000000
      ......
      [ 67.330494] pstate: 80400085 (Nzcv daIf +PAN -UAO)
      [ 67.330510] pc : mempool_free+0x70/0xa0
      [ 67.330515] lr : mempool_free+0x4c/0xa0
      [ 67.330520] sp : ffffff8008013b20
      [ 67.330524] x29: ffffff8008013b20 x28: 0000000000000004
      [ 67.330530] x27: ffffffa8c2ff40a0 x26: 00000000ffff1cc8
      [ 67.330535] x25: 0000000000000000 x24: ffffffdada34c800
      [ 67.330541] x23: 0000000000000000 x22: ffffffdada34c800
      [ 67.330547] x21: 00000000ffff1cc8 x20: ffffffd9a1304d80
      [ 67.330552] x19: ffffffdada34c970 x18: 000000b312625d9c
      [ 67.330558] x17: 00000000002dcfbf x16: 00000000000006dd
      [ 67.330563] x15: 000000000093b41e x14: 0000000000000010
      [ 67.330569] x13: 0000000000007f7a x12: 0000000034155555
      [ 67.330574] x11: 0000000000000001 x10: 0000000000000001
      [ 67.330579] x9 : 0000000000000000 x8 : 0000000000000000
      [ 67.330585] x7 : 0000000000000000 x6 : ffffff80148b5c1a
      [ 67.330590] x5 : ffffff8008013ae0 x4 : 0000000000000001
      [ 67.330596] x3 : ffffff80080139c8 x2 : ffffff801083bab8
      [ 67.330601] x1 : 0000000000000000 x0 : ffffffdada34c970
      [ 67.330609] Call trace:
      [ 67.330616] mempool_free+0x70/0xa0
      [ 67.330627] bio_put+0xf8/0x110
      [ 67.330638] dec_pending+0x13c/0x230
      [ 67.330644] clone_endio+0x90/0x180
      [ 67.330649] bio_endio+0x198/0x1b8
      [ 67.330655] dec_pending+0x190/0x230
      [ 67.330660] clone_endio+0x90/0x180
      [ 67.330665] bio_endio+0x198/0x1b8
      [ 67.330673] blk_update_request+0x214/0x428
      [ 67.330683] scsi_end_request+0x2c/0x300
      [ 67.330688] scsi_io_completion+0xa0/0x710
      [ 67.330695] scsi_finish_command+0xd8/0x110
      [ 67.330700] scsi_softirq_done+0x114/0x148
      [ 67.330708] blk_done_softirq+0x74/0xd0
      [ 67.330716] __do_softirq+0x18c/0x374
      [ 67.330724] irq_exit+0xb4/0xb8
      [ 67.330732] __handle_domain_irq+0x84/0xc0
      [ 67.330737] gic_handle_irq+0x148/0x1b0
      [ 67.330744] el1_irq+0xe8/0x190
      [ 67.330753] lpm_cpuidle_enter+0x4f8/0x538
      [ 67.330759] cpuidle_enter_state+0x1fc/0x398
      [ 67.330764] cpuidle_enter+0x18/0x20
      [ 67.330772] do_idle+0x1b4/0x290
      [ 67.330778] cpu_startup_entry+0x20/0x28
      [ 67.330786] secondary_start_kernel+0x160/0x170
      
      Fix this by:
      1) Establishing pointers to 'struct dm_io' members in
      dm_io_dec_pending() so that they may be passed into end_io_acct()
      _after_ free_io() is called.
      2) Moving end_io_acct() after free_io().
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarJiazi Li <lijiazi@xiaomi.com>
      Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
      Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Reviewed-by: default avatarMike Snitzer <snitzer@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      1cc4f2e3
    • Eric Dumazet's avatar
      tcp: make sure treq->af_specific is initialized · 5b15aac4
      Eric Dumazet authored
      stable inclusion
      from stable-4.19.242
      commit 6c2176f5ad48095aa1e2608b51bada5bebc568c1
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit ba5a4fdd63ae0c575707030db0b634b160baddd7 upstream.
      
      syzbot complained about a recent change in TCP stack,
      hitting a NULL pointer [1]
      
      tcp request sockets have an af_specific pointer, which
      was used before the blamed change only for SYNACK generation
      in non SYNCOOKIE mode.
      
      tcp requests sockets momentarily created when third packet
      coming from client in SYNCOOKIE mode were not using
      treq->af_specific.
      
      Make sure this field is populated, in the same way normal
      TCP requests sockets do in tcp_conn_request().
      
      [1]
      TCP: request_sock_TCPv6: Possible SYN flooding on port 20002. Sending cookies.  Check SNMP counters.
      general protection fault, probably for non-canonical address 0xdffffc0000000001: 0000 [#1] PREEMPT SMP KASAN
      KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
      CPU: 1 PID: 3695 Comm: syz-executor864 Not tainted 5.18.0-rc3-syzkaller-00224-g5fd1fe4807f9 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      RIP: 0010:tcp_create_openreq_child+0xe16/0x16b0 net/ipv4/tcp_minisocks.c:534
      Code: 48 c1 ea 03 80 3c 02 00 0f 85 e5 07 00 00 4c 8b b3 28 01 00 00 48 b8 00 00 00 00 00 fc ff df 49 8d 7e 08 48 89 fa 48 c1 ea 03 <80> 3c 02 00 0f 85 c9 07 00 00 48 8b 3c 24 48 89 de 41 ff 56 08 48
      RSP: 0018:ffffc90000de0588 EFLAGS: 00010202
      RAX: dffffc0000000000 RBX: ffff888076490330 RCX: 0000000000000100
      RDX: 0000000000000001 RSI: ffffffff87d67ff0 RDI: 0000000000000008
      RBP: ffff88806ee1c7f8 R08: 0000000000000000 R09: 0000000000000000
      R10: ffffffff87d67f00 R11: 0000000000000000 R12: ffff88806ee1bfc0
      R13: ffff88801b0e0368 R14: 0000000000000000 R15: 0000000000000000
      FS:  00007f517fe58700(0000) GS:ffff8880b9d00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007ffcead76960 CR3: 000000006f97b000 CR4: 00000000003506e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       <IRQ>
       tcp_v6_syn_recv_sock+0x199/0x23b0 net/ipv6/tcp_ipv6.c:1267
       tcp_get_cookie_sock+0xc9/0x850 net/ipv4/syncookies.c:207
       cookie_v6_check+0x15c3/0x2340 net/ipv6/syncookies.c:258
       tcp_v6_cookie_check net/ipv6/tcp_ipv6.c:1131 [inline]
       tcp_v6_do_rcv+0x1148/0x13b0 net/ipv6/tcp_ipv6.c:1486
       tcp_v6_rcv+0x3305/0x3840 net/ipv6/tcp_ipv6.c:1725
       ip6_protocol_deliver_rcu+0x2e9/0x1900 net/ipv6/ip6_input.c:422
       ip6_input_finish+0x14c/0x2c0 net/ipv6/ip6_input.c:464
       NF_HOOK include/linux/netfilter.h:307 [inline]
       NF_HOOK include/linux/netfilter.h:301 [inline]
       ip6_input+0x9c/0xd0 net/ipv6/ip6_input.c:473
       dst_input include/net/dst.h:461 [inline]
       ip6_rcv_finish net/ipv6/ip6_input.c:76 [inline]
       NF_HOOK include/linux/netfilter.h:307 [inline]
       NF_HOOK include/linux/netfilter.h:301 [inline]
       ipv6_rcv+0x27f/0x3b0 net/ipv6/ip6_input.c:297
       __netif_receive_skb_one_core+0x114/0x180 net/core/dev.c:5405
       __netif_receive_skb+0x24/0x1b0 net/core/dev.c:5519
       process_backlog+0x3a0/0x7c0 net/core/dev.c:5847
       __napi_poll+0xb3/0x6e0 net/core/dev.c:6413
       napi_poll net/core/dev.c:6480 [inline]
       net_rx_action+0x8ec/0xc60 net/core/dev.c:6567
       __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
       sysvec_apic_timer_interrupt+0x93/0xc0 arch/x86/kernel/apic/apic.c:1097
      
      Fixes: 5b0b9e4c2c89 ("tcp: md5: incorrect tcp_header_len for incoming connections")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Francesco Ruggeri <fruggeri@arista.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      [fruggeri: Account for backport conflicts from 35b2c321 and 6fc8c827]
      Signed-off-by: default avatarFrancesco Ruggeri <fruggeri@arista.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      5b15aac4
    • Eric Dumazet's avatar
      net: igmp: respect RCU rules in ip_mc_source() and ip_mc_msfilter() · 86626ff1
      Eric Dumazet authored
      stable inclusion
      from stable-4.19.242
      commit 2fc50abb0b3cbeb0cdae129b4ea0437ea35215df
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit dba5bdd57bea587ea4f0b79b03c71135f84a7e8b upstream.
      
      syzbot reported an UAF in ip_mc_sf_allow() [1]
      
      Whenever RCU protected list replaces an object,
      the pointer to the new object needs to be updated
      _before_ the call to kfree_rcu() or call_rcu()
      
      Because kfree_rcu(ptr, rcu) got support for NULL ptr
      only recently in commit 12edff04 ("rcu: Make kfree_rcu()
      ignore NULL pointers"), I chose to use the conditional
      to make sure stable backports won't miss this detail.
      
      if (psl)
          kfree_rcu(psl, rcu);
      
      net/ipv6/mcast.c has similar issues, addressed in a separate patch.
      
      [1]
      BUG: KASAN: use-after-free in ip_mc_sf_allow+0x6bb/0x6d0 net/ipv4/igmp.c:2655
      Read of size 4 at addr ffff88807d37b904 by task syz-executor.5/908
      
      CPU: 0 PID: 908 Comm: syz-executor.5 Not tainted 5.18.0-rc4-syzkaller-00064-g8f4dd16603ce #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+0xeb/0x467 mm/kasan/report.c:313
       print_report mm/kasan/report.c:429 [inline]
       kasan_report.cold+0xf4/0x1c6 mm/kasan/report.c:491
       ip_mc_sf_allow+0x6bb/0x6d0 net/ipv4/igmp.c:2655
       raw_v4_input net/ipv4/raw.c:190 [inline]
       raw_local_deliver+0x4d1/0xbe0 net/ipv4/raw.c:218
       ip_protocol_deliver_rcu+0xcf/0xb30 net/ipv4/ip_input.c:193
       ip_local_deliver_finish+0x2ee/0x4c0 net/ipv4/ip_input.c:233
       NF_HOOK include/linux/netfilter.h:307 [inline]
       NF_HOOK include/linux/netfilter.h:301 [inline]
       ip_local_deliver+0x1b3/0x200 net/ipv4/ip_input.c:254
       dst_input include/net/dst.h:461 [inline]
       ip_rcv_finish+0x1cb/0x2f0 net/ipv4/ip_input.c:437
       NF_HOOK include/linux/netfilter.h:307 [inline]
       NF_HOOK include/linux/netfilter.h:301 [inline]
       ip_rcv+0xaa/0xd0 net/ipv4/ip_input.c:556
       __netif_receive_skb_one_core+0x114/0x180 net/core/dev.c:5405
       __netif_receive_skb+0x24/0x1b0 net/core/dev.c:5519
       netif_receive_skb_internal net/core/dev.c:5605 [inline]
       netif_receive_skb+0x13e/0x8e0 net/core/dev.c:5664
       tun_rx_batched.isra.0+0x460/0x720 drivers/net/tun.c:1534
       tun_get_user+0x28b7/0x3e30 drivers/net/tun.c:1985
       tun_chr_write_iter+0xdb/0x200 drivers/net/tun.c:2015
       call_write_iter include/linux/fs.h:2050 [inline]
       new_sync_write+0x38a/0x560 fs/read_write.c:504
       vfs_write+0x7c0/0xac0 fs/read_write.c:591
       ksys_write+0x127/0x250 fs/read_write.c:644
       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
      RIP: 0033:0x7f3f12c3bbff
      Code: 89 54 24 18 48 89 74 24 10 89 7c 24 08 e8 99 fd ff ff 48 8b 54 24 18 48 8b 74 24 10 41 89 c0 8b 7c 24 08 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 31 44 89 c7 48 89 44 24 08 e8 cc fd ff ff 48
      RSP: 002b:00007f3f13ea9130 EFLAGS: 00000293 ORIG_RAX: 0000000000000001
      RAX: ffffffffffffffda RBX: 00007f3f12d9bf60 RCX: 00007f3f12c3bbff
      RDX: 0000000000000036 RSI: 0000000020002ac0 RDI: 00000000000000c8
      RBP: 00007f3f12ce308d R08: 0000000000000000 R09: 0000000000000000
      R10: 0000000000000036 R11: 0000000000000293 R12: 0000000000000000
      R13: 00007fffb68dd79f R14: 00007f3f13ea9300 R15: 0000000000022000
       </TASK>
      
      Allocated by task 908:
       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:436 [inline]
       ____kasan_kmalloc mm/kasan/common.c:515 [inline]
       ____kasan_kmalloc mm/kasan/common.c:474 [inline]
       __kasan_kmalloc+0xa6/0xd0 mm/kasan/common.c:524
       kasan_kmalloc include/linux/kasan.h:234 [inline]
       __do_kmalloc mm/slab.c:3710 [inline]
       __kmalloc+0x209/0x4d0 mm/slab.c:3719
       kmalloc include/linux/slab.h:586 [inline]
       sock_kmalloc net/core/sock.c:2501 [inline]
       sock_kmalloc+0xb5/0x100 net/core/sock.c:2492
       ip_mc_source+0xba2/0x1100 net/ipv4/igmp.c:2392
       do_ip_setsockopt net/ipv4/ip_sockglue.c:1296 [inline]
       ip_setsockopt+0x2312/0x3ab0 net/ipv4/ip_sockglue.c:1432
       raw_setsockopt+0x274/0x2c0 net/ipv4/raw.c:861
       __sys_setsockopt+0x2db/0x6a0 net/socket.c:2180
       __do_sys_setsockopt net/socket.c:2191 [inline]
       __se_sys_setsockopt net/socket.c:2188 [inline]
       __x64_sys_setsockopt+0xba/0x150 net/socket.c:2188
       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
      
      Freed by task 753:
       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/0x30 mm/kasan/generic.c:370
       ____kasan_slab_free mm/kasan/common.c:366 [inline]
       ____kasan_slab_free+0x13d/0x180 mm/kasan/common.c:328
       kasan_slab_free include/linux/kasan.h:200 [inline]
       __cache_free mm/slab.c:3439 [inline]
       kmem_cache_free_bulk+0x69/0x460 mm/slab.c:3774
       kfree_bulk include/linux/slab.h:437 [inline]
       kfree_rcu_work+0x51c/0xa10 kernel/rcu/tree.c:3318
       process_one_work+0x996/0x1610 kernel/workqueue.c:2289
       worker_thread+0x665/0x1080 kernel/workqueue.c:2436
       kthread+0x2e9/0x3a0 kernel/kthread.c:376
       ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:298
      
      Last potentially related work creation:
       kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38
       __kasan_record_aux_stack+0x7e/0x90 mm/kasan/generic.c:348
       kvfree_call_rcu+0x74/0x990 kernel/rcu/tree.c:3595
       ip_mc_msfilter+0x712/0xb60 net/ipv4/igmp.c:2510
       do_ip_setsockopt net/ipv4/ip_sockglue.c:1257 [inline]
       ip_setsockopt+0x32e1/0x3ab0 net/ipv4/ip_sockglue.c:1432
       raw_setsockopt+0x274/0x2c0 net/ipv4/raw.c:861
       __sys_setsockopt+0x2db/0x6a0 net/socket.c:2180
       __do_sys_setsockopt net/socket.c:2191 [inline]
       __se_sys_setsockopt net/socket.c:2188 [inline]
       __x64_sys_setsockopt+0xba/0x150 net/socket.c:2188
       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
      
      Second to last potentially related work creation:
       kasan_save_stack+0x1e/0x40 mm/kasan/common.c:38
       __kasan_record_aux_stack+0x7e/0x90 mm/kasan/generic.c:348
       call_rcu+0x99/0x790 kernel/rcu/tree.c:3074
       mpls_dev_notify+0x552/0x8a0 net/mpls/af_mpls.c:1656
       notifier_call_chain+0xb5/0x200 kernel/notifier.c:84
       call_netdevice_notifiers_info+0xb5/0x130 net/core/dev.c:1938
       call_netdevice_notifiers_extack net/core/dev.c:1976 [inline]
       call_netdevice_notifiers net/core/dev.c:1990 [inline]
       unregister_netdevice_many+0x92e/0x1890 net/core/dev.c:10751
       default_device_exit_batch+0x449/0x590 net/core/dev.c:11245
       ops_exit_list+0x125/0x170 net/core/net_namespace.c:167
       cleanup_net+0x4ea/0xb00 net/core/net_namespace.c:594
       process_one_work+0x996/0x1610 kernel/workqueue.c:2289
       worker_thread+0x665/0x1080 kernel/workqueue.c:2436
       kthread+0x2e9/0x3a0 kernel/kthread.c:376
       ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:298
      
      The buggy address belongs to the object at ffff88807d37b900
       which belongs to the cache kmalloc-64 of size 64
      The buggy address is located 4 bytes inside of
       64-byte region [ffff88807d37b900, ffff88807d37b940)
      
      The buggy address belongs to the physical page:
      page:ffffea0001f4dec0 refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff88807d37b180 pfn:0x7d37b
      flags: 0xfff00000000200(slab|node=0|zone=1|lastcpupid=0x7ff)
      raw: 00fff00000000200 ffff888010c41340 ffffea0001c795c8 ffff888010c40200
      raw: ffff88807d37b180 ffff88807d37b000 000000010000001f 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 0x342040(__GFP_IO|__GFP_NOWARN|__GFP_COMP|__GFP_HARDWALL|__GFP_THISNODE), pid 2963, tgid 2963 (udevd), ts 139732238007, free_ts 139730893262
       prep_new_page mm/page_alloc.c:2441 [inline]
       get_page_from_freelist+0xba2/0x3e00 mm/page_alloc.c:4182
       __alloc_pages+0x1b2/0x500 mm/page_alloc.c:5408
       __alloc_pages_node include/linux/gfp.h:587 [inline]
       kmem_getpages mm/slab.c:1378 [inline]
       cache_grow_begin+0x75/0x350 mm/slab.c:2584
       cache_alloc_refill+0x27f/0x380 mm/slab.c:2957
       ____cache_alloc mm/slab.c:3040 [inline]
       ____cache_alloc mm/slab.c:3023 [inline]
       __do_cache_alloc mm/slab.c:3267 [inline]
       slab_alloc mm/slab.c:3309 [inline]
       __do_kmalloc mm/slab.c:3708 [inline]
       __kmalloc+0x3b3/0x4d0 mm/slab.c:3719
       kmalloc include/linux/slab.h:586 [inline]
       kzalloc include/linux/slab.h:714 [inline]
       tomoyo_encode2.part.0+0xe9/0x3a0 security/tomoyo/realpath.c:45
       tomoyo_encode2 security/tomoyo/realpath.c:31 [inline]
       tomoyo_encode+0x28/0x50 security/tomoyo/realpath.c:80
       tomoyo_realpath_from_path+0x186/0x620 security/tomoyo/realpath.c:288
       tomoyo_get_realpath security/tomoyo/file.c:151 [inline]
       tomoyo_path_perm+0x21b/0x400 security/tomoyo/file.c:822
       security_inode_getattr+0xcf/0x140 security/security.c:1350
       vfs_getattr fs/stat.c:157 [inline]
       vfs_statx+0x16a/0x390 fs/stat.c:232
       vfs_fstatat+0x8c/0xb0 fs/stat.c:255
       __do_sys_newfstatat+0x91/0x110 fs/stat.c:425
       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
      page last free stack trace:
       reset_page_owner include/linux/page_owner.h:24 [inline]
       free_pages_prepare mm/page_alloc.c:1356 [inline]
       free_pcp_prepare+0x549/0xd20 mm/page_alloc.c:1406
       free_unref_page_prepare mm/page_alloc.c:3328 [inline]
       free_unref_page+0x19/0x6a0 mm/page_alloc.c:3423
       __vunmap+0x85d/0xd30 mm/vmalloc.c:2667
       __vfree+0x3c/0xd0 mm/vmalloc.c:2715
       vfree+0x5a/0x90 mm/vmalloc.c:2746
       __do_replace+0x16b/0x890 net/ipv6/netfilter/ip6_tables.c:1117
       do_replace net/ipv6/netfilter/ip6_tables.c:1157 [inline]
       do_ip6t_set_ctl+0x90d/0xb90 net/ipv6/netfilter/ip6_tables.c:1639
       nf_setsockopt+0x83/0xe0 net/netfilter/nf_sockopt.c:101
       ipv6_setsockopt+0x122/0x180 net/ipv6/ipv6_sockglue.c:1026
       tcp_setsockopt+0x136/0x2520 net/ipv4/tcp.c:3696
       __sys_setsockopt+0x2db/0x6a0 net/socket.c:2180
       __do_sys_setsockopt net/socket.c:2191 [inline]
       __se_sys_setsockopt net/socket.c:2188 [inline]
       __x64_sys_setsockopt+0xba/0x150 net/socket.c:2188
       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
      
      Memory state around the buggy address:
       ffff88807d37b800: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
       ffff88807d37b880: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
      >ffff88807d37b900: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
                         ^
       ffff88807d37b980: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
       ffff88807d37ba00: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
      
      Fixes: c85bb41e ("igmp: fix ip_mc_sf_allow race [v5]")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Cc: Flavio Leitner <fbl@sysclose.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      86626ff1
    • Mikulas Patocka's avatar
      x86: __memcpy_flushcache: fix wrong alignment if size > 2^32 · c1a275fb
      Mikulas Patocka authored
      stable inclusion
      from stable-4.19.242
      commit 47b97d5b3a3c52a925359435332a5f57ceadf12c
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit a6823e4e360fe975bd3da4ab156df7c74c8b07f3 ]
      
      The first "if" condition in __memcpy_flushcache is supposed to align the
      "dest" variable to 8 bytes and copy data up to this alignment.  However,
      this condition may misbehave if "size" is greater than 4GiB.
      
      The statement min_t(unsigned, size, ALIGN(dest, 8) - dest); casts both
      arguments to unsigned int and selects the smaller one.  However, the
      cast truncates high bits in "size" and it results in misbehavior.
      
      For example:
      
      	suppose that size == 0x100000001, dest == 0x200000002
      	min_t(unsigned, size, ALIGN(dest, 8) - dest) == min_t(0x1, 0xe) == 0x1;
      	...
      	dest += 0x1;
      
      so we copy just one byte "and" dest remains unaligned.
      
      This patch fixes the bug by replacing unsigned with size_t.
      
      Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      c1a275fb
    • Eric Dumazet's avatar
      tcp: fix potential xmit stalls caused by TCP_NOTSENT_LOWAT · 6cba1671
      Eric Dumazet authored
      stable inclusion
      from stable-4.19.242
      commit cc639aa3c2f5ec7189a2917af49559006f678c62
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit 4bfe744ff1644fbc0a991a2677dc874475dd6776 ]
      
      I had this bug sitting for too long in my pile, it is time to fix it.
      
      Thanks to Doug Porter for reminding me of it!
      
      We had various attempts in the past, including commit
      0cbe6a8f ("tcp: remove SOCK_QUEUE_SHRUNK"),
      but the issue is that TCP stack currently only generates
      EPOLLOUT from input path, when tp->snd_una has advanced
      and skb(s) cleaned from rtx queue.
      
      If a flow has a big RTT, and/or receives SACKs, it is possible
      that the notsent part (tp->write_seq - tp->snd_nxt) reaches 0
      and no more data can be sent until tp->snd_una finally advances.
      
      What is needed is to also check if POLLOUT needs to be generated
      whenever tp->snd_nxt is advanced, from output path.
      
      This bug triggers more often after an idle period, as
      we do not receive ACK for at least one RTT. tcp_notsent_lowat
      could be a fraction of what CWND and pacing rate would allow to
      send during this RTT.
      
      In a followup patch, I will remove the bogus call
      to tcp_chrono_stop(sk, TCP_CHRONO_SNDBUF_LIMITED)
      from tcp_check_space(). Fact that we have decided to generate
      an EPOLLOUT does not mean the application has immediately
      refilled the transmit queue. This optimistic call
      might have been the reason the bug seemed not too serious.
      
      Tested:
      
      200 ms rtt, 1% packet loss, 32 MB tcp_rmem[2] and tcp_wmem[2]
      
      $ echo 500000 >/proc/sys/net/ipv4/tcp_notsent_lowat
      $ cat bench_rr.sh
      SUM=0
      for i in {1..10}
      do
       V=`netperf -H remote_host -l30 -t TCP_RR -- -r 10000000,10000 -o LOCAL_BYTES_SENT | egrep -v "MIGRATED|Bytes"`
       echo $V
       SUM=$(($SUM + $V))
      done
      echo SUM=$SUM
      
      Before patch:
      $ bench_rr.sh
      130000000
      80000000
      140000000
      140000000
      140000000
      140000000
      130000000
      40000000
      90000000
      110000000
      SUM=1140000000
      
      After patch:
      $ bench_rr.sh
      430000000
      590000000
      530000000
      450000000
      450000000
      350000000
      450000000
      490000000
      480000000
      460000000
      SUM=4680000000  # This is 410 % of the value before patch.
      
      Fixes: c9bee3b7 ("tcp: TCP_NOTSENT_LOWAT socket option")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarDoug Porter <dsp@fb.com>
      Cc: Soheil Hassas Yeganeh <soheil@google.com>
      Cc: Neal Cardwell <ncardwell@google.com>
      Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      6cba1671
    • Peilin Ye's avatar
      ip_gre: Make o_seqno start from 0 in native mode · 3c84f8ea
      Peilin Ye authored
      stable inclusion
      from stable-4.19.242
      commit fc926663635277fe808c5b68d0f74db1f40d67d8
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit ff827beb706ed719c766acf36449801ded0c17fc ]
      
      For GRE and GRETAP devices, currently o_seqno starts from 1 in native
      mode.  According to RFC 2890 2.2., "The first datagram is sent with a
      sequence number of 0."  Fix it.
      
      It is worth mentioning that o_seqno already starts from 0 in collect_md
      mode, see gre_fb_xmit(), where tunnel->o_seqno is passed to
      gre_build_header() before getting incremented.
      
      Fixes: 1da177e4 ("Linux-2.6.12-rc2")
      Signed-off-by: default avatarPeilin Ye <peilin.ye@bytedance.com>
      Acked-by: default avatarWilliam Tu <u9012063@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      3c84f8ea
    • Francesco Ruggeri's avatar
      tcp: md5: incorrect tcp_header_len for incoming connections · f0a25b1e
      Francesco Ruggeri authored
      stable inclusion
      from stable-4.19.242
      commit aad94f14c26357930088b6d7b9f85b5a00d96ed3
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit 5b0b9e4c2c895227c8852488b3f09839233bba54 ]
      
      In tcp_create_openreq_child we adjust tcp_header_len for md5 using the
      remote address in newsk. But that address is still 0 in newsk at this
      point, and it is only set later by the callers (tcp_v[46]_syn_recv_sock).
      Use the address from the request socket instead.
      
      Fixes: cfb6eeb4 ("[TCP]: MD5 Signature Option (RFC2385) support.")
      Signed-off-by: default avatarFrancesco Ruggeri <fruggeri@arista.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20220421005026.686A45EC01F2@us226.sjc.aristanetworks.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      f0a25b1e
    • Miaoqian Lin's avatar
      mtd: rawnand: Fix return value check of wait_for_completion_timeout · 96f01432
      Miaoqian Lin authored
      stable inclusion
      from stable-4.19.242
      commit abe55c894249e5fca4a0356dd519ea38de6586a7
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit 084c16ab423a8890121b902b405823bfec5b4365 ]
      
      wait_for_completion_timeout() returns unsigned long not int.
      It returns 0 if timed out, and positive if completed.
      The check for <= 0 is ambiguous and should be == 0 here
      indicating timeout which is the only error case.
      
      Fixes: 83738d87 ("mtd: sh_flctl: Add DMA capabilty")
      Signed-off-by: default avatarMiaoqian Lin <linmq006@gmail.com>
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20220412083435.29254-1-linmq006@gmail.com
      
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      96f01432
    • Chuanhong Guo's avatar
      mtd: rawnand: fix ecc parameters for mt7622 · fd2bf3c4
      Chuanhong Guo authored
      stable inclusion
      from stable-4.19.242
      commit bf9fe6ecb19ae11159fcc4f48be9f4b7d62f55bd
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit 9fe4e0d3cbfe90152137963cc024ecb63db6e8e6 ]
      
      According to the datasheet, mt7622 only has 5 ECC capabilities instead
      of 7, and the decoding error register is arranged  as follows:
      +------+---------+---------+---------+---------+
      | Bits |  19:15  |  14:10  |   9:5   |   4:0   |
      +------+---------+---------+---------+---------+
      | Name | ERRNUM3 | ERRNUM2 | ERRNUM1 | ERRNUM0 |
      +------+---------+---------+---------+---------+
      This means err_mask should be 0x1f instead of 0x3f and the number of
      bits shifted in mtk_ecc_get_stats should be 5 instead of 8.
      
      This commit introduces err_shift for the difference in this register
      and fix other existing parameters.
      
      Public MT7622 reference manual can be found on [0] and the info this
      commit is based on is from page 656 and page 660.
      
      [0]: https://wiki.banana-pi.org/Banana_Pi_BPI-R64#Documents
      
      
      
      Fixes: 98dea8d7 ("mtd: nand: mtk: Support MT7622 NAND flash controller.")
      Signed-off-by: default avatarChuanhong Guo <gch981213@gmail.com>
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20220402160315.919094-1-gch981213@gmail.com
      
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      fd2bf3c4
    • Mikulas Patocka's avatar
      hex2bin: fix access beyond string end · 3b523a1d
      Mikulas Patocka authored
      stable inclusion
      from stable-4.19.242
      commit a4981bed962f82513c878f87dc9affd157ee7cb9
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit e4d8a29997731b3bb14059024b24df9f784288d0 upstream.
      
      If we pass too short string to "hex2bin" (and the string size without
      the terminating NUL character is even), "hex2bin" reads one byte after
      the terminating NUL character.  This patch fixes it.
      
      Note that hex_to_bin returns -1 on error and hex2bin return -EINVAL on
      error - so we can't just return the variable "hi" or "lo" on error.
      This inconsistency may be fixed in the next merge window, but for the
      purpose of fixing this bug, we just preserve the existing behavior and
      return -1 and -EINVAL.
      
      Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
      Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
      Fixes: b7804983 ("lib: add error checking to hex2bin")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      3b523a1d
    • Maciej W. Rozycki's avatar
      serial: 8250: Correct the clock for EndRun PTP/1588 PCIe device · 84affeaf
      Maciej W. Rozycki authored
      stable inclusion
      from stable-4.19.242
      commit 5c3fef73bf1d11a0df2e49f396086618747fed62
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit 637674fa40059cddcc3ad2212728965072f62ea3 upstream.
      
      The EndRun PTP/1588 dual serial port device is based on the Oxford
      Semiconductor OXPCIe952 UART device with the PCI vendor:device ID set
      for EndRun Technologies and is therefore driven by a fixed 62.5MHz clock
      input derived from the 100MHz PCI Express clock.  The clock rate is
      divided by the oversampling rate of 16 as it is supplied to the baud
      rate generator, yielding the baud base of 3906250.
      
      Replace the incorrect baud base of 4000000 with the right value of
      3906250 then, complementing commit 6cbe45d8ac93 ("serial: 8250: Correct
      the clock for OxSemi PCIe devices").
      
      Signed-off-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Cc: stable <stable@kernel.org>
      Fixes: 1bc8cde4 ("8250_pci: Added driver for Endrun Technologies PTP PCIe card.")
      Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
      Link: https://lore.kernel.org/r/alpine.DEB.2.21.2204181515270.9383@angie.orcam.me.uk
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      84affeaf
    • Maciej W. Rozycki's avatar
      serial: 8250: Also set sticky MCR bits in console restoration · 83527914
      Maciej W. Rozycki authored
      stable inclusion
      from stable-4.19.242
      commit f014e39e38fb708bc83c39008a21fbec6825d7cd
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit 6e6eebdf5e2455f089ccd000754a0deaeb79af82 upstream.
      
      Sticky MCR bits are lost in console restoration if console suspending
      has been disabled.  This currently affects the AFE bit, which works in
      combination with RTS which we set, so we want to make sure the UART
      retains control of its FIFO where previously requested.  Also specific
      drivers may need other bits in the future.
      
      Signed-off-by: default avatarMaciej W. Rozycki <macro@orcam.me.uk>
      Fixes: 4516d50a ("serial: 8250: Use canary to restart console after suspend")
      Cc: stable@vger.kernel.org # v4.0+
      Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
      Link: https://lore.kernel.org/r/alpine.DEB.2.21.2204181518490.9383@angie.orcam.me.uk
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      83527914
    • Theodore Ts'o's avatar
      ext4: force overhead calculation if the s_overhead_cluster makes no sense · ec8134da
      Theodore Ts'o authored
      stable inclusion
      from stable-4.19.240
      commit 92d2d51544468a7b378a7213c0c27202f3e1b7c1
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit 85d825dbf4899a69407338bae462a59aa9a37326 upstream.
      
      If the file system does not use bigalloc, calculating the overhead is
      cheap, so force the recalculation of the overhead so we don't have to
      trust the precalculated overhead in the superblock.
      
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Cc: stable@kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      ec8134da
    • Theodore Ts'o's avatar
      ext4: fix overhead calculation to account for the reserved gdt blocks · 95917018
      Theodore Ts'o authored
      stable inclusion
      from stable-4.19.240
      commit 3ce516253cc237b65f521ffa0a79ae868c6f500d
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit 10b01ee92df52c8d7200afead4d5e5f55a5c58b1 upstream.
      
      The kernel calculation was underestimating the overhead by not taking
      into account the reserved gdt blocks.  With this change, the overhead
      calculated by the kernel matches the overhead calculation in mke2fs.
      
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Cc: stable@kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      95917018
    • Tadeusz Struk's avatar
      ext4: limit length to bitmap_maxbytes - blocksize in punch_hole · ca1fbb0f
      Tadeusz Struk authored
      stable inclusion
      from stable-4.19.240
      commit 52e38a2d3e8124f1c71d1a6f5837e9db72515f9c
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      CVE: NA
      
      --------------------------------
      
      commit 2da376228a2427501feb9d15815a45dbdbdd753e upstream.
      
      Syzbot found an issue [1] in ext4_fallocate().
      The C reproducer [2] calls fallocate(), passing size 0xffeffeff000ul,
      and offset 0x1000000ul, which, when added together exceed the
      bitmap_maxbytes for the inode. This triggers a BUG in
      ext4_ind_remove_space(). According to the comments in this function
      the 'end' parameter needs to be one block after the last block to be
      removed. In the case when the BUG is triggered it points to the last
      block. Modify the ext4_punch_hole() function and add constraint that
      caps the length to satisfy the one before laster block requirement.
      
      LINK: [1] https://syzkaller.appspot.com/bug?id=b80bd9cf348aac724a4f4dff251800106d721331
      LINK: [2] https://syzkaller.appspot.com/text?tag=ReproC&x=14ba0238700000
      
      
      
      Fixes: a4bb6b64 ("ext4: enable "punch hole" functionality")
      Reported-by: default avatar <syzbot+7a806094edd5d07ba029@syzkaller.appspotmail.com>
      Signed-off-by: default avatarTadeusz Struk <tadeusz.struk@linaro.org>
      Link: https://lore.kernel.org/r/20220331200515.153214-1-tadeusz.struk@linaro.org
      
      
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Cc: stable@kernel.org
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      ca1fbb0f
    • Rob Herring's avatar
      arm_pmu: Validate single/group leader events · 8fa2ff55
      Rob Herring authored
      stable inclusion
      from stable-4.19.240
      commit a9a3ed2ddc8aeb6ea20db106b6a6ed94bc5cd944
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      commit e5c23779f93d45e39a52758ca593bd7e62e9b4be upstream.
      
      In the case where there is only a cycle counter available (i.e.
      PMCR_EL0.N is 0) and an event other than CPU cycles is opened, the open
      should fail as the event can never possibly be scheduled. However, the
      event validation when an event is opened is skipped when the group
      leader is opened. Fix this by always validating the group leader events.
      
      Reported-by: default avatarAl Grant <al.grant@arm.com>
      Cc: Will Deacon <will@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Signed-off-by: default avatarRob Herring <robh@kernel.org>
      Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
      Link: https://lore.kernel.org/r/20220408203330.4014015-1-robh@kernel.org
      
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarWill Deacon <will@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      8fa2ff55
    • Eric Dumazet's avatar
      netlink: reset network and mac headers in netlink_dump() · 0e96d898
      Eric Dumazet authored
      stable inclusion
      from stable-4.19.240
      commit c99c91fa176350fee7300c338d79fa68dd3023b9
      category: bugfix
      bugzilla: https://gitee.com/openeuler/kernel/issues/I5A6BA
      
      
      CVE: NA
      
      --------------------------------
      
      [ Upstream commit 99c07327ae11e24886d552dddbe4537bfca2765d ]
      
      netlink_dump() is allocating an skb, reserves space in it
      but forgets to reset network header.
      
      This allows a BPF program, invoked later from sk_filter()
      to access uninitialized kernel memory from the reserved
      space.
      
      Theorically mac header reset could be omitted, because
      it is set to a special initial value.
      bpf_internal_load_pointer_neg_helper calls skb_mac_header()
      without checking skb_mac_header_was_set().
      Relying on skb->len not being too big seems fragile.
      We also could add a sanity check in bpf_internal_load_pointer_neg_helper()
      to avoid surprises in the future.
      
      syzbot report was:
      
      BUG: KMSAN: uninit-value in ___bpf_prog_run+0xa22b/0xb420 kernel/bpf/core.c:1637
       ___bpf_prog_run+0xa22b/0xb420 kernel/bpf/core.c:1637
       __bpf_prog_run32+0x121/0x180 kernel/bpf/core.c:1796
       bpf_dispatcher_nop_func include/linux/bpf.h:784 [inline]
       __bpf_prog_run include/linux/filter.h:626 [inline]
       bpf_prog_run include/linux/filter.h:633 [inline]
       __bpf_prog_run_save_cb+0x168/0x580 include/linux/filter.h:756
       bpf_prog_run_save_cb include/linux/filter.h:770 [inline]
       sk_filter_trim_cap+0x3bc/0x8c0 net/core/filter.c:150
       sk_filter include/linux/filter.h:905 [inline]
       netlink_dump+0xe0c/0x16c0 net/netlink/af_netlink.c:2276
       netlink_recvmsg+0x1129/0x1c80 net/netlink/af_netlink.c:2002
       sock_recvmsg_nosec net/socket.c:948 [inline]
       sock_recvmsg net/socket.c:966 [inline]
       sock_read_iter+0x5a9/0x630 net/socket.c:1039
       do_iter_readv_writev+0xa7f/0xc70
       do_iter_read+0x52c/0x14c0 fs/read_write.c:786
       vfs_readv fs/read_write.c:906 [inline]
       do_readv+0x432/0x800 fs/read_write.c:943
       __do_sys_readv fs/read_write.c:1034 [inline]
       __se_sys_readv fs/read_write.c:1031 [inline]
       __x64_sys_readv+0xe5/0x120 fs/read_write.c:1031
       do_syscall_x64 arch/x86/entry/common.c:51 [inline]
       do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:81
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      Uninit was stored to memory at:
       ___bpf_prog_run+0x96c/0xb420 kernel/bpf/core.c:1558
       __bpf_prog_run32+0x121/0x180 kernel/bpf/core.c:1796
       bpf_dispatcher_nop_func include/linux/bpf.h:784 [inline]
       __bpf_prog_run include/linux/filter.h:626 [inline]
       bpf_prog_run include/linux/filter.h:633 [inline]
       __bpf_prog_run_save_cb+0x168/0x580 include/linux/filter.h:756
       bpf_prog_run_save_cb include/linux/filter.h:770 [inline]
       sk_filter_trim_cap+0x3bc/0x8c0 net/core/filter.c:150
       sk_filter include/linux/filter.h:905 [inline]
       netlink_dump+0xe0c/0x16c0 net/netlink/af_netlink.c:2276
       netlink_recvmsg+0x1129/0x1c80 net/netlink/af_netlink.c:2002
       sock_recvmsg_nosec net/socket.c:948 [inline]
       sock_recvmsg net/socket.c:966 [inline]
       sock_read_iter+0x5a9/0x630 net/socket.c:1039
       do_iter_readv_writev+0xa7f/0xc70
       do_iter_read+0x52c/0x14c0 fs/read_write.c:786
       vfs_readv fs/read_write.c:906 [inline]
       do_readv+0x432/0x800 fs/read_write.c:943
       __do_sys_readv fs/read_write.c:1034 [inline]
       __se_sys_readv fs/read_write.c:1031 [inline]
       __x64_sys_readv+0xe5/0x120 fs/read_write.c:1031
       do_syscall_x64 arch/x86/entry/common.c:51 [inline]
       do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:81
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      Uninit was created at:
       slab_post_alloc_hook mm/slab.h:737 [inline]
       slab_alloc_node mm/slub.c:3244 [inline]
       __kmalloc_node_track_caller+0xde3/0x14f0 mm/slub.c:4972
       kmalloc_reserve net/core/skbuff.c:354 [inline]
       __alloc_skb+0x545/0xf90 net/core/skbuff.c:426
       alloc_skb include/linux/skbuff.h:1158 [inline]
       netlink_dump+0x30f/0x16c0 net/netlink/af_netlink.c:2242
       netlink_recvmsg+0x1129/0x1c80 net/netlink/af_netlink.c:2002
       sock_recvmsg_nosec net/socket.c:948 [inline]
       sock_recvmsg net/socket.c:966 [inline]
       sock_read_iter+0x5a9/0x630 net/socket.c:1039
       do_iter_readv_writev+0xa7f/0xc70
       do_iter_read+0x52c/0x14c0 fs/read_write.c:786
       vfs_readv fs/read_write.c:906 [inline]
       do_readv+0x432/0x800 fs/read_write.c:943
       __do_sys_readv fs/read_write.c:1034 [inline]
       __se_sys_readv fs/read_write.c:1031 [inline]
       __x64_sys_readv+0xe5/0x120 fs/read_write.c:1031
       do_syscall_x64 arch/x86/entry/common.c:51 [inline]
       do_syscall_64+0x54/0xd0 arch/x86/entry/common.c:81
       entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      CPU: 0 PID: 3470 Comm: syz-executor751 Not tainted 5.17.0-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      
      Fixes: db65a3aa ("netlink: Trim skb to alloc size to avoid MSG_TRUNC")
      Fixes: 9063e21f ("netlink: autosize skb lengthes")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Link: https://lore.kernel.org/r/20220415181442.551228-1-eric.dumazet@gmail.com
      
      
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      Signed-off-by: default avatarYongqiang Liu <liuyongqiang13@huawei.com>
      0e96d898