Skip to content
Snippets Groups Projects
  1. Mar 06, 2024
    • Davide Caratti's avatar
      mptcp: fix double-free on socket dismantle · f74362a0
      Davide Caratti authored
      
      commit 10048689 upstream.
      
      when MPTCP server accepts an incoming connection, it clones its listener
      socket. However, the pointer to 'inet_opt' for the new socket has the same
      value as the original one: as a consequence, on program exit it's possible
      to observe the following splat:
      
        BUG: KASAN: double-free in inet_sock_destruct+0x54f/0x8b0
        Free of addr ffff888485950880 by task swapper/25/0
      
        CPU: 25 PID: 0 Comm: swapper/25 Kdump: loaded Not tainted 6.8.0-rc1+ #609
        Hardware name: Supermicro SYS-6027R-72RF/X9DRH-7TF/7F/iTF/iF, BIOS 3.0  07/26/2013
        Call Trace:
         <IRQ>
         dump_stack_lvl+0x32/0x50
         print_report+0xca/0x620
         kasan_report_invalid_free+0x64/0x90
         __kasan_slab_free+0x1aa/0x1f0
         kfree+0xed/0x2e0
         inet_sock_destruct+0x54f/0x8b0
         __sk_destruct+0x48/0x5b0
         rcu_do_batch+0x34e/0xd90
         rcu_core+0x559/0xac0
         __do_softirq+0x183/0x5a4
         irq_exit_rcu+0x12d/0x170
         sysvec_apic_timer_interrupt+0x6b/0x80
         </IRQ>
         <TASK>
         asm_sysvec_apic_timer_interrupt+0x16/0x20
        RIP: 0010:cpuidle_enter_state+0x175/0x300
        Code: 30 00 0f 84 1f 01 00 00 83 e8 01 83 f8 ff 75 e5 48 83 c4 18 44 89 e8 5b 5d 41 5c 41 5d 41 5e 41 5f c3 cc cc cc cc fb 45 85 ed <0f> 89 60 ff ff ff 48 c1 e5 06 48 c7 43 18 00 00 00 00 48 83 44 2b
        RSP: 0018:ffff888481cf7d90 EFLAGS: 00000202
        RAX: 0000000000000000 RBX: ffff88887facddc8 RCX: 0000000000000000
        RDX: 1ffff1110ff588b1 RSI: 0000000000000019 RDI: ffff88887fac4588
        RBP: 0000000000000004 R08: 0000000000000002 R09: 0000000000043080
        R10: 0009b02ea273363f R11: ffff88887fabf42b R12: ffffffff932592e0
        R13: 0000000000000004 R14: 0000000000000000 R15: 00000022c880ec80
         cpuidle_enter+0x4a/0xa0
         do_idle+0x310/0x410
         cpu_startup_entry+0x51/0x60
         start_secondary+0x211/0x270
         secondary_startup_64_no_verify+0x184/0x18b
         </TASK>
      
        Allocated by task 6853:
         kasan_save_stack+0x1c/0x40
         kasan_save_track+0x10/0x30
         __kasan_kmalloc+0xa6/0xb0
         __kmalloc+0x1eb/0x450
         cipso_v4_sock_setattr+0x96/0x360
         netlbl_sock_setattr+0x132/0x1f0
         selinux_netlbl_socket_post_create+0x6c/0x110
         selinux_socket_post_create+0x37b/0x7f0
         security_socket_post_create+0x63/0xb0
         __sock_create+0x305/0x450
         __sys_socket_create.part.23+0xbd/0x130
         __sys_socket+0x37/0xb0
         __x64_sys_socket+0x6f/0xb0
         do_syscall_64+0x83/0x160
         entry_SYSCALL_64_after_hwframe+0x6e/0x76
      
        Freed by task 6858:
         kasan_save_stack+0x1c/0x40
         kasan_save_track+0x10/0x30
         kasan_save_free_info+0x3b/0x60
         __kasan_slab_free+0x12c/0x1f0
         kfree+0xed/0x2e0
         inet_sock_destruct+0x54f/0x8b0
         __sk_destruct+0x48/0x5b0
         subflow_ulp_release+0x1f0/0x250
         tcp_cleanup_ulp+0x6e/0x110
         tcp_v4_destroy_sock+0x5a/0x3a0
         inet_csk_destroy_sock+0x135/0x390
         tcp_fin+0x416/0x5c0
         tcp_data_queue+0x1bc8/0x4310
         tcp_rcv_state_process+0x15a3/0x47b0
         tcp_v4_do_rcv+0x2c1/0x990
         tcp_v4_rcv+0x41fb/0x5ed0
         ip_protocol_deliver_rcu+0x6d/0x9f0
         ip_local_deliver_finish+0x278/0x360
         ip_local_deliver+0x182/0x2c0
         ip_rcv+0xb5/0x1c0
         __netif_receive_skb_one_core+0x16e/0x1b0
         process_backlog+0x1e3/0x650
         __napi_poll+0xa6/0x500
         net_rx_action+0x740/0xbb0
         __do_softirq+0x183/0x5a4
      
        The buggy address belongs to the object at ffff888485950880
         which belongs to the cache kmalloc-64 of size 64
        The buggy address is located 0 bytes inside of
         64-byte region [ffff888485950880, ffff8884859508c0)
      
        The buggy address belongs to the physical page:
        page:0000000056d1e95e refcount:1 mapcount:0 mapping:0000000000000000 index:0xffff888485950700 pfn:0x485950
        flags: 0x57ffffc0000800(slab|node=1|zone=2|lastcpupid=0x1fffff)
        page_type: 0xffffffff()
        raw: 0057ffffc0000800 ffff88810004c640 ffffea00121b8ac0 dead000000000006
        raw: ffff888485950700 0000000000200019 00000001ffffffff 0000000000000000
        page dumped because: kasan: bad access detected
      
        Memory state around the buggy address:
         ffff888485950780: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
         ffff888485950800: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
        >ffff888485950880: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
                           ^
         ffff888485950900: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
         ffff888485950980: 00 00 00 00 00 01 fc fc fc fc fc fc fc fc fc fc
      
      Something similar (a refcount underflow) happens with CALIPSO/IPv6. Fix
      this by duplicating IP / IPv6 options after clone, so that
      ip{,6}_sock_destruct() doesn't end up freeing the same memory area twice.
      
      Fixes: cf7da0d6 ("mptcp: Create SUBFLOW socket for incoming connections")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDavide Caratti <dcaratti@redhat.com>
      Reviewed-by: default avatarMat Martineau <martineau@kernel.org>
      Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
      Link: https://lore.kernel.org/r/20240223-upstream-net-20240223-misc-fixes-v1-8-162e87e48497@kernel.org
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f74362a0
    • Chuanhong Guo's avatar
      mtd: spinand: gigadevice: fix Quad IO for GD5F1GQ5UExxG · 30d84d87
      Chuanhong Guo authored
      commit a4f9dd55 upstream.
      
      Read From Cache Quad IO (EBH) uses 2 dummy bytes on this chip according
      to page 23 of the datasheet[0].
      
      [0]: https://www.gigadevice.com/datasheet/gd5f1gq5xexxg/
      
      
      
      Fixes: 469b9924 ("mtd: spinand: gigadevice: Support GD5F1GQ5UExxG")
      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/20220320100001.247905-2-gch981213@gmail.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      30d84d87
    • Bartosz Golaszewski's avatar
      gpio: fix resource unwinding order in error path · 1805131d
      Bartosz Golaszewski authored
      
      [ Upstream commit ec5c54a9 ]
      
      Hogs are added *after* ACPI so should be removed *before* in error path.
      
      Fixes: a411e81e ("gpiolib: add hogs support for machine code")
      Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
      Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1805131d
    • Andy Shevchenko's avatar
      gpiolib: Fix the error path order in gpiochip_add_data_with_key() · 51f7044d
      Andy Shevchenko authored
      
      [ Upstream commit e4aec4da ]
      
      After shuffling the code, error path wasn't updated correctly.
      Fix it here.
      
      Fixes: 2f4133bb ("gpiolib: No need to call gpiochip_remove_pin_ranges() twice")
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      51f7044d
    • Arturas Moskvinas's avatar
      gpio: 74x164: Enable output pins after registers are reset · 947baae1
      Arturas Moskvinas authored
      [ Upstream commit 530b1dbd ]
      
      Chip outputs are enabled[1] before actual reset is performed[2] which might
      cause pin output value to flip flop if previous pin value was set to 1.
      Fix that behavior by making sure chip is fully reset before all outputs are
      enabled.
      
      Flip-flop can be noticed when module is removed and inserted again and one of
      the pins was changed to 1 before removal. 100 microsecond flipping is
      noticeable on oscilloscope (100khz SPI bus).
      
      For a properly reset chip - output is enabled around 100 microseconds (on 100khz
      SPI bus) later during probing process hence should be irrelevant behavioral
      change.
      
      Fixes: 7ebc194d (gpio: 74x164: Introduce 'enable-gpios' property)
      Link: https://elixir.bootlin.com/linux/v6.7.4/source/drivers/gpio/gpio-74x164.c#L130 [1]
      Link: https://elixir.bootlin.com/linux/v6.7.4/source/drivers/gpio/gpio-74x164.c#L150
      
       [2]
      Signed-off-by: default avatarArturas Moskvinas <arturas.moskvinas@gmail.com>
      Signed-off-by: default avatarBartosz Golaszewski <bartosz.golaszewski@linaro.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      947baae1
    • Oscar Salvador's avatar
      fs,hugetlb: fix NULL pointer dereference in hugetlbs_fill_super · 80d85229
      Oscar Salvador authored
      commit 79d72c68 upstream.
      
      When configuring a hugetlb filesystem via the fsconfig() syscall, there is
      a possible NULL dereference in hugetlbfs_fill_super() caused by assigning
      NULL to ctx->hstate in hugetlbfs_parse_param() when the requested pagesize
      is non valid.
      
      E.g: Taking the following steps:
      
           fd = fsopen("hugetlbfs", FSOPEN_CLOEXEC);
           fsconfig(fd, FSCONFIG_SET_STRING, "pagesize", "1024", 0);
           fsconfig(fd, FSCONFIG_CMD_CREATE, NULL, NULL, 0);
      
      Given that the requested "pagesize" is invalid, ctxt->hstate will be replaced
      with NULL, losing its previous value, and we will print an error:
      
       ...
       ...
       case Opt_pagesize:
       ps = memparse(param->string, &rest);
       ctx->hstate = h;
       if (!ctx->hstate) {
               pr_err("Unsupported page size %lu MB\n", ps / SZ_1M);
               return -EINVAL;
       }
       return 0;
       ...
       ...
      
      This is a problem because later on, we will dereference ctxt->hstate in
      hugetlbfs_fill_super()
      
       ...
       ...
       sb->s_blocksize = huge_page_size(ctx->hstate);
       ...
       ...
      
      Causing below Oops.
      
      Fix this by replacing cxt->hstate value only when then pagesize is known
      to be valid.
      
       kernel: hugetlbfs: Unsupported page size 0 MB
       kernel: BUG: kernel NULL pointer dereference, address: 0000000000000028
       kernel: #PF: supervisor read access in kernel mode
       kernel: #PF: error_code(0x0000) - not-present page
       kernel: PGD 800000010f66c067 P4D 800000010f66c067 PUD 1b22f8067 PMD 0
       kernel: Oops: 0000 [#1] PREEMPT SMP PTI
       kernel: CPU: 4 PID: 5659 Comm: syscall Tainted: G            E      6.8.0-rc2-default+ #22 5a47c3fef76212addcc6eb71344aabc35190ae8f
       kernel: Hardware name: Intel Corp. GROVEPORT/GROVEPORT, BIOS GVPRCRB1.86B.0016.D04.1705030402 05/03/2017
       kernel: RIP: 0010:hugetlbfs_fill_super+0xb4/0x1a0
       kernel: Code: 48 8b 3b e8 3e c6 ed ff 48 85 c0 48 89 45 20 0f 84 d6 00 00 00 48 b8 ff ff ff ff ff ff ff 7f 4c 89 e7 49 89 44 24 20 48 8b 03 <8b> 48 28 b8 00 10 00 00 48 d3 e0 49 89 44 24 18 48 8b 03 8b 40 28
       kernel: RSP: 0018:ffffbe9960fcbd48 EFLAGS: 00010246
       kernel: RAX: 0000000000000000 RBX: ffff9af5272ae780 RCX: 0000000000372004
       kernel: RDX: ffffffffffffffff RSI: ffffffffffffffff RDI: ffff9af555e9b000
       kernel: RBP: ffff9af52ee66b00 R08: 0000000000000040 R09: 0000000000370004
       kernel: R10: ffffbe9960fcbd48 R11: 0000000000000040 R12: ffff9af555e9b000
       kernel: R13: ffffffffa66b86c0 R14: ffff9af507d2f400 R15: ffff9af507d2f400
       kernel: FS:  00007ffbc0ba4740(0000) GS:ffff9b0bd7000000(0000) knlGS:0000000000000000
       kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       kernel: CR2: 0000000000000028 CR3: 00000001b1ee0000 CR4: 00000000001506f0
       kernel: Call Trace:
       kernel:  <TASK>
       kernel:  ? __die_body+0x1a/0x60
       kernel:  ? page_fault_oops+0x16f/0x4a0
       kernel:  ? search_bpf_extables+0x65/0x70
       kernel:  ? fixup_exception+0x22/0x310
       kernel:  ? exc_page_fault+0x69/0x150
       kernel:  ? asm_exc_page_fault+0x22/0x30
       kernel:  ? __pfx_hugetlbfs_fill_super+0x10/0x10
       kernel:  ? hugetlbfs_fill_super+0xb4/0x1a0
       kernel:  ? hugetlbfs_fill_super+0x28/0x1a0
       kernel:  ? __pfx_hugetlbfs_fill_super+0x10/0x10
       kernel:  vfs_get_super+0x40/0xa0
       kernel:  ? __pfx_bpf_lsm_capable+0x10/0x10
       kernel:  vfs_get_tree+0x25/0xd0
       kernel:  vfs_cmd_create+0x64/0xe0
       kernel:  __x64_sys_fsconfig+0x395/0x410
       kernel:  do_syscall_64+0x80/0x160
       kernel:  ? syscall_exit_to_user_mode+0x82/0x240
       kernel:  ? do_syscall_64+0x8d/0x160
       kernel:  ? syscall_exit_to_user_mode+0x82/0x240
       kernel:  ? do_syscall_64+0x8d/0x160
       kernel:  ? exc_page_fault+0x69/0x150
       kernel:  entry_SYSCALL_64_after_hwframe+0x6e/0x76
       kernel: RIP: 0033:0x7ffbc0cb87c9
       kernel: Code: 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 66 90 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 8b 0d 97 96 0d 00 f7 d8 64 89 01 48
       kernel: RSP: 002b:00007ffc29d2f388 EFLAGS: 00000206 ORIG_RAX: 00000000000001af
       kernel: RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007ffbc0cb87c9
       kernel: RDX: 0000000000000000 RSI: 0000000000000006 RDI: 0000000000000003
       kernel: RBP: 00007ffc29d2f3b0 R08: 0000000000000000 R09: 0000000000000000
       kernel: R10: 0000000000000000 R11: 0000000000000206 R12: 0000000000000000
       kernel: R13: 00007ffc29d2f4c0 R14: 0000000000000000 R15: 0000000000000000
       kernel:  </TASK>
       kernel: Modules linked in: rpcsec_gss_krb5(E) auth_rpcgss(E) nfsv4(E) dns_resolver(E) nfs(E) lockd(E) grace(E) sunrpc(E) netfs(E) af_packet(E) bridge(E) stp(E) llc(E) iscsi_ibft(E) iscsi_boot_sysfs(E) intel_rapl_msr(E) intel_rapl_common(E) iTCO_wdt(E) intel_pmc_bxt(E) sb_edac(E) iTCO_vendor_support(E) x86_pkg_temp_thermal(E) intel_powerclamp(E) coretemp(E) kvm_intel(E) rfkill(E) ipmi_ssif(E) kvm(E) acpi_ipmi(E) irqbypass(E) pcspkr(E) igb(E) ipmi_si(E) mei_me(E) i2c_i801(E) joydev(E) intel_pch_thermal(E) i2c_smbus(E) dca(E) lpc_ich(E) mei(E) ipmi_devintf(E) ipmi_msghandler(E) acpi_pad(E) tiny_power_button(E) button(E) fuse(E) efi_pstore(E) configfs(E) ip_tables(E) x_tables(E) ext4(E) mbcache(E) jbd2(E) hid_generic(E) usbhid(E) sd_mod(E) t10_pi(E) crct10dif_pclmul(E) crc32_pclmul(E) crc32c_intel(E) polyval_clmulni(E) ahci(E) xhci_pci(E) polyval_generic(E) gf128mul(E) ghash_clmulni_intel(E) sha512_ssse3(E) sha256_ssse3(E) xhci_pci_renesas(E) libahci(E) ehci_pci(E) sha1_ssse3(E) xhci_hcd(E) ehci_hcd(E) libata(E)
       kernel:  mgag200(E) i2c_algo_bit(E) usbcore(E) wmi(E) sg(E) dm_multipath(E) dm_mod(E) scsi_dh_rdac(E) scsi_dh_emc(E) scsi_dh_alua(E) scsi_mod(E) scsi_common(E) aesni_intel(E) crypto_simd(E) cryptd(E)
       kernel: Unloaded tainted modules: acpi_cpufreq(E):1 fjes(E):1
       kernel: CR2: 0000000000000028
       kernel: ---[ end trace 0000000000000000 ]---
       kernel: RIP: 0010:hugetlbfs_fill_super+0xb4/0x1a0
       kernel: Code: 48 8b 3b e8 3e c6 ed ff 48 85 c0 48 89 45 20 0f 84 d6 00 00 00 48 b8 ff ff ff ff ff ff ff 7f 4c 89 e7 49 89 44 24 20 48 8b 03 <8b> 48 28 b8 00 10 00 00 48 d3 e0 49 89 44 24 18 48 8b 03 8b 40 28
       kernel: RSP: 0018:ffffbe9960fcbd48 EFLAGS: 00010246
       kernel: RAX: 0000000000000000 RBX: ffff9af5272ae780 RCX: 0000000000372004
       kernel: RDX: ffffffffffffffff RSI: ffffffffffffffff RDI: ffff9af555e9b000
       kernel: RBP: ffff9af52ee66b00 R08: 0000000000000040 R09: 0000000000370004
       kernel: R10: ffffbe9960fcbd48 R11: 0000000000000040 R12: ffff9af555e9b000
       kernel: R13: ffffffffa66b86c0 R14: ffff9af507d2f400 R15: ffff9af507d2f400
       kernel: FS:  00007ffbc0ba4740(0000) GS:ffff9b0bd7000000(0000) knlGS:0000000000000000
       kernel: CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
       kernel: CR2: 0000000000000028 CR3: 00000001b1ee0000 CR4: 00000000001506f0
      
      Link: https://lkml.kernel.org/r/20240130210418.3771-1-osalvador@suse.de
      
      
      Fixes: 32021982 ("hugetlbfs: Convert to fs_context")
      Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
      Signed-off-by: default avatarOscar Salvador <osalvador@suse.de>
      Acked-by: default avatarMuchun Song <muchun.song@linux.dev>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarVamsi Krishna Brahmajosyula <vamsi-krishna.brahmajosyula@broadcom.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      80d85229
    • Baokun Li's avatar
      cachefiles: fix memory leak in cachefiles_add_cache() · 43eccc58
      Baokun Li authored
      
      commit e21a2f17 upstream.
      
      The following memory leak was reported after unbinding /dev/cachefiles:
      
      ==================================================================
      unreferenced object 0xffff9b674176e3c0 (size 192):
        comm "cachefilesd2", pid 680, jiffies 4294881224
        hex dump (first 32 bytes):
          01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
        backtrace (crc ea38a44b):
          [<ffffffff8eb8a1a5>] kmem_cache_alloc+0x2d5/0x370
          [<ffffffff8e917f86>] prepare_creds+0x26/0x2e0
          [<ffffffffc002eeef>] cachefiles_determine_cache_security+0x1f/0x120
          [<ffffffffc00243ec>] cachefiles_add_cache+0x13c/0x3a0
          [<ffffffffc0025216>] cachefiles_daemon_write+0x146/0x1c0
          [<ffffffff8ebc4a3b>] vfs_write+0xcb/0x520
          [<ffffffff8ebc5069>] ksys_write+0x69/0xf0
          [<ffffffff8f6d4662>] do_syscall_64+0x72/0x140
          [<ffffffff8f8000aa>] entry_SYSCALL_64_after_hwframe+0x6e/0x76
      ==================================================================
      
      Put the reference count of cache_cred in cachefiles_daemon_unbind() to
      fix the problem. And also put cache_cred in cachefiles_add_cache() error
      branch to avoid memory leaks.
      
      Fixes: 9ae326a6 ("CacheFiles: A cache that backs onto a mounted filesystem")
      CC: stable@vger.kernel.org
      Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
      Link: https://lore.kernel.org/r/20240217081431.796809-1-libaokun1@huawei.com
      
      
      Acked-by: default avatarDavid Howells <dhowells@redhat.com>
      Reviewed-by: default avatarJingbo Xu <jefflexu@linux.alibaba.com>
      Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
      Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
      Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      43eccc58
    • Baokun Li's avatar
      ext4: avoid bb_free and bb_fragments inconsistency in mb_free_blocks() · 28717281
      Baokun Li authored
      
      commit 2331fd4a upstream.
      
      After updating bb_free in mb_free_blocks, it is possible to return without
      updating bb_fragments because the block being freed is found to have
      already been freed, which leads to inconsistency between bb_free and
      bb_fragments.
      
      Since the group may be unlocked in ext4_grp_locked_error(), this can lead
      to problems such as dividing by zero when calculating the average fragment
      length. Hence move the update of bb_free to after the block double-free
      check guarantees that the corresponding statistics are updated only after
      the core block bitmap is modified.
      
      Fixes: eabe0444 ("ext4: speed-up releasing blocks on commit")
      CC:  <stable@vger.kernel.org> # 3.10
      Suggested-by: default avatarJan Kara <jack@suse.cz>
      Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
      Reviewed-by: default avatarJan Kara <jack@suse.cz>
      Link: https://lore.kernel.org/r/20240104142040.2835097-5-libaokun1@huawei.com
      
      
      Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
      Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      28717281
    • Paolo Abeni's avatar
      mptcp: fix possible deadlock in subflow diag · 70e5b013
      Paolo Abeni authored
      
      commit d6a9608a upstream.
      
      Syzbot and Eric reported a lockdep splat in the subflow diag:
      
         WARNING: possible circular locking dependency detected
         6.8.0-rc4-syzkaller-00212-g40b9385dd8e6 #0 Not tainted
      
         syz-executor.2/24141 is trying to acquire lock:
         ffff888045870130 (k-sk_lock-AF_INET6){+.+.}-{0:0}, at:
         tcp_diag_put_ulp net/ipv4/tcp_diag.c:100 [inline]
         ffff888045870130 (k-sk_lock-AF_INET6){+.+.}-{0:0}, at:
         tcp_diag_get_aux+0x738/0x830 net/ipv4/tcp_diag.c:137
      
         but task is already holding lock:
         ffffc9000135e488 (&h->lhash2[i].lock){+.+.}-{2:2}, at: spin_lock
         include/linux/spinlock.h:351 [inline]
         ffffc9000135e488 (&h->lhash2[i].lock){+.+.}-{2:2}, at:
         inet_diag_dump_icsk+0x39f/0x1f80 net/ipv4/inet_diag.c:1038
      
         which lock already depends on the new lock.
      
         the existing dependency chain (in reverse order) is:
      
         -> #1 (&h->lhash2[i].lock){+.+.}-{2:2}:
         lock_acquire+0x1e3/0x530 kernel/locking/lockdep.c:5754
         __raw_spin_lock include/linux/spinlock_api_smp.h:133 [inline]
         _raw_spin_lock+0x2e/0x40 kernel/locking/spinlock.c:154
         spin_lock include/linux/spinlock.h:351 [inline]
         __inet_hash+0x335/0xbe0 net/ipv4/inet_hashtables.c:743
         inet_csk_listen_start+0x23a/0x320 net/ipv4/inet_connection_sock.c:1261
         __inet_listen_sk+0x2a2/0x770 net/ipv4/af_inet.c:217
         inet_listen+0xa3/0x110 net/ipv4/af_inet.c:239
         rds_tcp_listen_init+0x3fd/0x5a0 net/rds/tcp_listen.c:316
         rds_tcp_init_net+0x141/0x320 net/rds/tcp.c:577
         ops_init+0x352/0x610 net/core/net_namespace.c:136
         __register_pernet_operations net/core/net_namespace.c:1214 [inline]
         register_pernet_operations+0x2cb/0x660 net/core/net_namespace.c:1283
         register_pernet_device+0x33/0x80 net/core/net_namespace.c:1370
         rds_tcp_init+0x62/0xd0 net/rds/tcp.c:735
         do_one_initcall+0x238/0x830 init/main.c:1236
         do_initcall_level+0x157/0x210 init/main.c:1298
         do_initcalls+0x3f/0x80 init/main.c:1314
         kernel_init_freeable+0x42f/0x5d0 init/main.c:1551
         kernel_init+0x1d/0x2a0 init/main.c:1441
         ret_from_fork+0x4b/0x80 arch/x86/kernel/process.c:147
         ret_from_fork_asm+0x1b/0x30 arch/x86/entry/entry_64.S:242
      
         -> #0 (k-sk_lock-AF_INET6){+.+.}-{0:0}:
         check_prev_add kernel/locking/lockdep.c:3134 [inline]
         check_prevs_add kernel/locking/lockdep.c:3253 [inline]
         validate_chain+0x18ca/0x58e0 kernel/locking/lockdep.c:3869
         __lock_acquire+0x1345/0x1fd0 kernel/locking/lockdep.c:5137
         lock_acquire+0x1e3/0x530 kernel/locking/lockdep.c:5754
         lock_sock_fast include/net/sock.h:1723 [inline]
         subflow_get_info+0x166/0xd20 net/mptcp/diag.c:28
         tcp_diag_put_ulp net/ipv4/tcp_diag.c:100 [inline]
         tcp_diag_get_aux+0x738/0x830 net/ipv4/tcp_diag.c:137
         inet_sk_diag_fill+0x10ed/0x1e00 net/ipv4/inet_diag.c:345
         inet_diag_dump_icsk+0x55b/0x1f80 net/ipv4/inet_diag.c:1061
         __inet_diag_dump+0x211/0x3a0 net/ipv4/inet_diag.c:1263
         inet_diag_dump_compat+0x1c1/0x2d0 net/ipv4/inet_diag.c:1371
         netlink_dump+0x59b/0xc80 net/netlink/af_netlink.c:2264
         __netlink_dump_start+0x5df/0x790 net/netlink/af_netlink.c:2370
         netlink_dump_start include/linux/netlink.h:338 [inline]
         inet_diag_rcv_msg_compat+0x209/0x4c0 net/ipv4/inet_diag.c:1405
         sock_diag_rcv_msg+0xe7/0x410
         netlink_rcv_skb+0x1e3/0x430 net/netlink/af_netlink.c:2543
         sock_diag_rcv+0x2a/0x40 net/core/sock_diag.c:280
         netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
         netlink_unicast+0x7ea/0x980 net/netlink/af_netlink.c:1367
         netlink_sendmsg+0xa3b/0xd70 net/netlink/af_netlink.c:1908
         sock_sendmsg_nosec net/socket.c:730 [inline]
         __sock_sendmsg+0x221/0x270 net/socket.c:745
         ____sys_sendmsg+0x525/0x7d0 net/socket.c:2584
         ___sys_sendmsg net/socket.c:2638 [inline]
         __sys_sendmsg+0x2b0/0x3a0 net/socket.c:2667
         do_syscall_64+0xf9/0x240
         entry_SYSCALL_64_after_hwframe+0x6f/0x77
      
      As noted by Eric we can break the lock dependency chain avoid
      dumping any extended info for the mptcp subflow listener:
      nothing actually useful is presented there.
      
      Fixes: b8adb69a ("mptcp: fix lockless access in subflow ULP diag")
      Cc: stable@vger.kernel.org
      Reported-by: default avatarEric Dumazet <edumazet@google.com>
      Closes: https://lore.kernel.org/netdev/CANn89iJ=Oecw6OZDwmSYc9HJKQ_G32uN11L+oUcMu+TOD5Xiaw@mail.gmail.com/
      
      
      Suggested-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Reviewed-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
      Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
      Link: https://lore.kernel.org/r/20240223-upstream-net-20240223-misc-fixes-v1-9-162e87e48497@kernel.org
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      70e5b013
    • Paolo Bonzini's avatar
      x86/cpu/intel: Detect TME keyid bits before setting MTRR mask registers · 36103f8c
      Paolo Bonzini authored
      
      commit 6890cb1a upstream.
      
      MKTME repurposes the high bit of physical address to key id for encryption
      key and, even though MAXPHYADDR in CPUID[0x80000008] remains the same,
      the valid bits in the MTRR mask register are based on the reduced number
      of physical address bits.
      
      detect_tme() in arch/x86/kernel/cpu/intel.c detects TME and subtracts
      it from the total usable physical bits, but it is called too late.
      Move the call to early_init_intel() so that it is called in setup_arch(),
      before MTRRs are setup.
      
      This fixes boot on TDX-enabled systems, which until now only worked with
      "disable_mtrr_cleanup".  Without the patch, the values written to the
      MTRRs mask registers were 52-bit wide (e.g. 0x000fffff_80000800) and
      the writes failed; with the patch, the values are 46-bit wide, which
      matches the reduced MAXPHYADDR that is shown in /proc/cpuinfo.
      
      Reported-by: default avatarZixi Chen <zixchen@redhat.com>
      Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
      Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
      Cc:stable@vger.kernel.org
      Link: https://lore.kernel.org/all/20240131230902.1867092-3-pbonzini%40redhat.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      36103f8c
    • Bjorn Andersson's avatar
      pmdomain: qcom: rpmhpd: Fix enabled_corner aggregation · 7a7cb526
      Bjorn Andersson authored
      
      commit 2a93c6cb upstream.
      
      Commit 'e3e56c05 ("soc: qcom: rpmhpd: Make power_on actually enable
      the domain")' aimed to make sure that a power-domain that is being
      enabled without any particular performance-state requested will at least
      turn the rail on, to avoid filling DeviceTree with otherwise unnecessary
      required-opps properties.
      
      But in the event that aggregation happens on a disabled power-domain, with
      an enabled peer without performance-state, both the local and peer
      corner are 0. The peer's enabled_corner is not considered, with the
      result that the underlying (shared) resource is disabled.
      
      One case where this can be observed is when the display stack keeps mmcx
      enabled (but without a particular performance-state vote) in order to
      access registers and sync_state happens in the rpmhpd driver. As mmcx_ao
      is flushed the state of the peer (mmcx) is not considered and mmcx_ao
      ends up turning off "mmcx.lvl" underneath mmcx. This has been observed
      several times, but has been painted over in DeviceTree by adding an
      explicit vote for the lowest non-disabled performance-state.
      
      Fixes: e3e56c05 ("soc: qcom: rpmhpd: Make power_on actually enable the domain")
      Reported-by: default avatarJohan Hovold <johan@kernel.org>
      Closes: https://lore.kernel.org/linux-arm-msm/ZdMwZa98L23mu3u6@hovoldconsulting.com/
      
      
      Cc:  <stable@vger.kernel.org>
      Signed-off-by: default avatarBjorn Andersson <quic_bjorande@quicinc.com>
      Reviewed-by: default avatarKonrad Dybcio <konrad.dybcio@linaro.org>
      Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Tested-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
      Reviewed-by: default avatarAbhinav Kumar <quic_abhinavk@quicinc.com>
      Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
      Tested-by: default avatarJohan Hovold <johan+linaro@kernel.org>
      Link: https://lore.kernel.org/r/20240226-rpmhpd-enable-corner-fix-v1-1-68c004cec48c@quicinc.com
      
      
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7a7cb526
    • Elad Nachman's avatar
      mmc: sdhci-xenon: fix PHY init clock stability · 36b02df0
      Elad Nachman authored
      
      commit 8e9f25a2 upstream.
      
      Each time SD/mmc phy is initialized, at times, in some of
      the attempts, phy fails to completes its initialization
      which results into timeout error. Per the HW spec, it is
      a pre-requisite to ensure a stable SD clock before a phy
      initialization is attempted.
      
      Fixes: 06c8b667 ("mmc: sdhci-xenon: Add support to PHYs of Marvell Xenon SDHC")
      Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarElad Nachman <enachman@marvell.com>
      Link: https://lore.kernel.org/r/20240222200930.1277665-1-enachman@marvell.com
      
      
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      36b02df0
    • Elad Nachman's avatar
      mmc: sdhci-xenon: add timeout for PHY init complete · d3c703c2
      Elad Nachman authored
      
      commit 09e23823 upstream.
      
      AC5X spec says PHY init complete bit must be polled until zero.
      We see cases in which timeout can take longer than the standard
      calculation on AC5X, which is expected following the spec comment above.
      According to the spec, we must wait as long as it takes for that bit to
      toggle on AC5X.
      Cap that with 100 delay loops so we won't get stuck forever.
      
      Fixes: 06c8b667 ("mmc: sdhci-xenon: Add support to PHYs of Marvell Xenon SDHC")
      Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarElad Nachman <enachman@marvell.com>
      Link: https://lore.kernel.org/r/20240222191714.1216470-3-enachman@marvell.com
      
      
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d3c703c2
    • Ivan Semenov's avatar
      mmc: core: Fix eMMC initialization with 1-bit bus connection · 3fd14520
      Ivan Semenov authored
      
      commit ff3206d2 upstream.
      
      Initializing an eMMC that's connected via a 1-bit bus is current failing,
      if the HW (DT) informs that 4-bit bus is supported. In fact this is a
      regression, as we were earlier capable of falling back to 1-bit mode, when
      switching to 4/8-bit bus failed. Therefore, let's restore the behaviour.
      
      Log for Samsung eMMC 5.1 chip connected via 1bit bus (only D0 pin)
      Before patch:
      [134509.044225] mmc0: switch to bus width 4 failed
      [134509.044509] mmc0: new high speed MMC card at address 0001
      [134509.054594] mmcblk0: mmc0:0001 BGUF4R 29.1 GiB
      [134509.281602] mmc0: switch to bus width 4 failed
      [134509.282638] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
      [134509.282657] Buffer I/O error on dev mmcblk0, logical block 0, async page read
      [134509.284598] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
      [134509.284602] Buffer I/O error on dev mmcblk0, logical block 0, async page read
      [134509.284609] ldm_validate_partition_table(): Disk read failed.
      [134509.286495] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
      [134509.286500] Buffer I/O error on dev mmcblk0, logical block 0, async page read
      [134509.288303] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
      [134509.288308] Buffer I/O error on dev mmcblk0, logical block 0, async page read
      [134509.289540] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
      [134509.289544] Buffer I/O error on dev mmcblk0, logical block 0, async page read
      [134509.289553]  mmcblk0: unable to read partition table
      [134509.289728] mmcblk0boot0: mmc0:0001 BGUF4R 31.9 MiB
      [134509.290283] mmcblk0boot1: mmc0:0001 BGUF4R 31.9 MiB
      [134509.294577] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 2
      [134509.295835] I/O error, dev mmcblk0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
      [134509.295841] Buffer I/O error on dev mmcblk0, logical block 0, async page read
      
      After patch:
      
      [134551.089613] mmc0: switch to bus width 4 failed
      [134551.090377] mmc0: new high speed MMC card at address 0001
      [134551.102271] mmcblk0: mmc0:0001 BGUF4R 29.1 GiB
      [134551.113365]  mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 p19 p20 p21
      [134551.114262] mmcblk0boot0: mmc0:0001 BGUF4R 31.9 MiB
      [134551.114925] mmcblk0boot1: mmc0:0001 BGUF4R 31.9 MiB
      
      Fixes: 577fb131 ("mmc: rework selection of bus speed mode")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarIvan Semenov <ivan@semenov.dev>
      Link: https://lore.kernel.org/r/20240206172845.34316-1-ivan@semenov.dev
      
      
      Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3fd14520
    • Curtis Klein's avatar
      dmaengine: fsl-qdma: init irq after reg initialization · 9579a21e
      Curtis Klein authored
      
      commit 87a39071 upstream.
      
      Initialize the qDMA irqs after the registers are configured so that
      interrupts that may have been pending from a primary kernel don't get
      processed by the irq handler before it is ready to and cause panic with
      the following trace:
      
        Call trace:
         fsl_qdma_queue_handler+0xf8/0x3e8
         __handle_irq_event_percpu+0x78/0x2b0
         handle_irq_event_percpu+0x1c/0x68
         handle_irq_event+0x44/0x78
         handle_fasteoi_irq+0xc8/0x178
         generic_handle_irq+0x24/0x38
         __handle_domain_irq+0x90/0x100
         gic_handle_irq+0x5c/0xb8
         el1_irq+0xb8/0x180
         _raw_spin_unlock_irqrestore+0x14/0x40
         __setup_irq+0x4bc/0x798
         request_threaded_irq+0xd8/0x190
         devm_request_threaded_irq+0x74/0xe8
         fsl_qdma_probe+0x4d4/0xca8
         platform_drv_probe+0x50/0xa0
         really_probe+0xe0/0x3f8
         driver_probe_device+0x64/0x130
         device_driver_attach+0x6c/0x78
         __driver_attach+0xbc/0x158
         bus_for_each_dev+0x5c/0x98
         driver_attach+0x20/0x28
         bus_add_driver+0x158/0x220
         driver_register+0x60/0x110
         __platform_driver_register+0x44/0x50
         fsl_qdma_driver_init+0x18/0x20
         do_one_initcall+0x48/0x258
         kernel_init_freeable+0x1a4/0x23c
         kernel_init+0x10/0xf8
         ret_from_fork+0x10/0x18
      
      Cc: stable@vger.kernel.org
      Fixes: b092529e ("dmaengine: fsl-qdma: Add qDMA controller driver for Layerscape SoCs")
      Signed-off-by: default avatarCurtis Klein <curtis.klein@hpe.com>
      Signed-off-by: default avatarYi Zhao <yi.zhao@nxp.com>
      Signed-off-by: default avatarFrank Li <Frank.Li@nxp.com>
      Link: https://lore.kernel.org/r/20240201220406.440145-1-Frank.Li@nxp.com
      
      
      Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9579a21e
    • Peng Ma's avatar
      dmaengine: fsl-qdma: fix SoC may hang on 16 byte unaligned read · bb3a06e9
      Peng Ma authored
      
      commit 9d739bcc upstream.
      
      There is chip (ls1028a) errata:
      
      The SoC may hang on 16 byte unaligned read transactions by QDMA.
      
      Unaligned read transactions initiated by QDMA may stall in the NOC
      (Network On-Chip), causing a deadlock condition. Stalled transactions will
      trigger completion timeouts in PCIe controller.
      
      Workaround:
      Enable prefetch by setting the source descriptor prefetchable bit
      ( SD[PF] = 1 ).
      
      Implement this workaround.
      
      Cc: stable@vger.kernel.org
      Fixes: b092529e ("dmaengine: fsl-qdma: Add qDMA controller driver for Layerscape SoCs")
      Signed-off-by: default avatarPeng Ma <peng.ma@nxp.com>
      Signed-off-by: default avatarFrank Li <Frank.Li@nxp.com>
      Link: https://lore.kernel.org/r/20240201215007.439503-1-Frank.Li@nxp.com
      
      
      Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      bb3a06e9
    • David Sterba's avatar
      btrfs: dev-replace: properly validate device names · 2886fe30
      David Sterba authored
      commit 9845664b upstream.
      
      There's a syzbot report that device name buffers passed to device
      replace are not properly checked for string termination which could lead
      to a read out of bounds in getname_kernel().
      
      Add a helper that validates both source and target device name buffers.
      For devid as the source initialize the buffer to empty string in case
      something tries to read it later.
      
      This was originally analyzed and fixed in a different way by Edward Adam
      Davis (see links).
      
      Link: https://lore.kernel.org/linux-btrfs/000000000000d1a1d1060cc9c5e7@google.com/
      Link: https://lore.kernel.org/linux-btrfs/tencent_44CA0665C9836EF9EEC80CB9E7E206DF5206@qq.com/
      
      
      CC: stable@vger.kernel.org # 4.19+
      CC: Edward Adam Davis <eadavis@qq.com>
      Reported-and-tested-by: default avatar <syzbot+33f23b49ac24f986c9e8@syzkaller.appspotmail.com>
      Reviewed-by: default avatarBoris Burkov <boris@bur.io>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      2886fe30
    • Johannes Berg's avatar
      wifi: nl80211: reject iftype change with mesh ID change · 99eb2159
      Johannes Berg authored
      
      commit f78c1375 upstream.
      
      It's currently possible to change the mesh ID when the
      interface isn't yet in mesh mode, at the same time as
      changing it into mesh mode. This leads to an overwrite
      of data in the wdev->u union for the interface type it
      currently has, causing cfg80211_change_iface() to do
      wrong things when switching.
      
      We could probably allow setting an interface to mesh
      while setting the mesh ID at the same time by doing a
      different order of operations here, but realistically
      there's no userspace that's going to do this, so just
      disallow changes in iftype when setting mesh ID.
      
      Cc: stable@vger.kernel.org
      Fixes: 29cbe68c ("cfg80211/mac80211: add mesh join/leave commands")
      Reported-by: default avatar <syzbot+dd4779978217b1973180@syzkaller.appspotmail.com>
      Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      99eb2159
    • Alexander Ofitserov's avatar
      gtp: fix use-after-free and null-ptr-deref in gtp_newlink() · e668b92a
      Alexander Ofitserov authored
      
      commit 616d82c3 upstream.
      
      The gtp_link_ops operations structure for the subsystem must be
      registered after registering the gtp_net_ops pernet operations structure.
      
      Syzkaller hit 'general protection fault in gtp_genl_dump_pdp' bug:
      
      [ 1010.702740] gtp: GTP module unloaded
      [ 1010.715877] general protection fault, probably for non-canonical address 0xdffffc0000000001: 0000 [#1] SMP KASAN NOPTI
      [ 1010.715888] KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
      [ 1010.715895] CPU: 1 PID: 128616 Comm: a.out Not tainted 6.8.0-rc6-std-def-alt1 #1
      [ 1010.715899] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.0-alt1 04/01/2014
      [ 1010.715908] RIP: 0010:gtp_newlink+0x4d7/0x9c0 [gtp]
      [ 1010.715915] Code: 80 3c 02 00 0f 85 41 04 00 00 48 8b bb d8 05 00 00 e8 ed f6 ff ff 48 89 c2 48 89 c5 48 b8 00 00 00 00 00 fc ff df 48 c1 ea 03 <80> 3c 02 00 0f 85 4f 04 00 00 4c 89 e2 4c 8b 6d 00 48 b8 00 00 00
      [ 1010.715920] RSP: 0018:ffff888020fbf180 EFLAGS: 00010203
      [ 1010.715929] RAX: dffffc0000000000 RBX: ffff88800399c000 RCX: 0000000000000000
      [ 1010.715933] RDX: 0000000000000001 RSI: ffffffff84805280 RDI: 0000000000000282
      [ 1010.715938] RBP: 000000000000000d R08: 0000000000000001 R09: 0000000000000000
      [ 1010.715942] R10: 0000000000000001 R11: 0000000000000001 R12: ffff88800399cc80
      [ 1010.715947] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000400
      [ 1010.715953] FS:  00007fd1509ab5c0(0000) GS:ffff88805b300000(0000) knlGS:0000000000000000
      [ 1010.715958] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [ 1010.715962] CR2: 0000000000000000 CR3: 000000001c07a000 CR4: 0000000000750ee0
      [ 1010.715968] PKRU: 55555554
      [ 1010.715972] Call Trace:
      [ 1010.715985]  ? __die_body.cold+0x1a/0x1f
      [ 1010.715995]  ? die_addr+0x43/0x70
      [ 1010.716002]  ? exc_general_protection+0x199/0x2f0
      [ 1010.716016]  ? asm_exc_general_protection+0x1e/0x30
      [ 1010.716026]  ? gtp_newlink+0x4d7/0x9c0 [gtp]
      [ 1010.716034]  ? gtp_net_exit+0x150/0x150 [gtp]
      [ 1010.716042]  __rtnl_newlink+0x1063/0x1700
      [ 1010.716051]  ? rtnl_setlink+0x3c0/0x3c0
      [ 1010.716063]  ? is_bpf_text_address+0xc0/0x1f0
      [ 1010.716070]  ? kernel_text_address.part.0+0xbb/0xd0
      [ 1010.716076]  ? __kernel_text_address+0x56/0xa0
      [ 1010.716084]  ? unwind_get_return_address+0x5a/0xa0
      [ 1010.716091]  ? create_prof_cpu_mask+0x30/0x30
      [ 1010.716098]  ? arch_stack_walk+0x9e/0xf0
      [ 1010.716106]  ? stack_trace_save+0x91/0xd0
      [ 1010.716113]  ? stack_trace_consume_entry+0x170/0x170
      [ 1010.716121]  ? __lock_acquire+0x15c5/0x5380
      [ 1010.716139]  ? mark_held_locks+0x9e/0xe0
      [ 1010.716148]  ? kmem_cache_alloc_trace+0x35f/0x3c0
      [ 1010.716155]  ? __rtnl_newlink+0x1700/0x1700
      [ 1010.716160]  rtnl_newlink+0x69/0xa0
      [ 1010.716166]  rtnetlink_rcv_msg+0x43b/0xc50
      [ 1010.716172]  ? rtnl_fdb_dump+0x9f0/0x9f0
      [ 1010.716179]  ? lock_acquire+0x1fe/0x560
      [ 1010.716188]  ? netlink_deliver_tap+0x12f/0xd50
      [ 1010.716196]  netlink_rcv_skb+0x14d/0x440
      [ 1010.716202]  ? rtnl_fdb_dump+0x9f0/0x9f0
      [ 1010.716208]  ? netlink_ack+0xab0/0xab0
      [ 1010.716213]  ? netlink_deliver_tap+0x202/0xd50
      [ 1010.716220]  ? netlink_deliver_tap+0x218/0xd50
      [ 1010.716226]  ? __virt_addr_valid+0x30b/0x590
      [ 1010.716233]  netlink_unicast+0x54b/0x800
      [ 1010.716240]  ? netlink_attachskb+0x870/0x870
      [ 1010.716248]  ? __check_object_size+0x2de/0x3b0
      [ 1010.716254]  netlink_sendmsg+0x938/0xe40
      [ 1010.716261]  ? netlink_unicast+0x800/0x800
      [ 1010.716269]  ? __import_iovec+0x292/0x510
      [ 1010.716276]  ? netlink_unicast+0x800/0x800
      [ 1010.716284]  __sock_sendmsg+0x159/0x190
      [ 1010.716290]  ____sys_sendmsg+0x712/0x880
      [ 1010.716297]  ? sock_write_iter+0x3d0/0x3d0
      [ 1010.716304]  ? __ia32_sys_recvmmsg+0x270/0x270
      [ 1010.716309]  ? lock_acquire+0x1fe/0x560
      [ 1010.716315]  ? drain_array_locked+0x90/0x90
      [ 1010.716324]  ___sys_sendmsg+0xf8/0x170
      [ 1010.716331]  ? sendmsg_copy_msghdr+0x170/0x170
      [ 1010.716337]  ? lockdep_init_map_type+0x2c7/0x860
      [ 1010.716343]  ? lockdep_hardirqs_on_prepare+0x430/0x430
      [ 1010.716350]  ? debug_mutex_init+0x33/0x70
      [ 1010.716360]  ? percpu_counter_add_batch+0x8b/0x140
      [ 1010.716367]  ? lock_acquire+0x1fe/0x560
      [ 1010.716373]  ? find_held_lock+0x2c/0x110
      [ 1010.716384]  ? __fd_install+0x1b6/0x6f0
      [ 1010.716389]  ? lock_downgrade+0x810/0x810
      [ 1010.716396]  ? __fget_light+0x222/0x290
      [ 1010.716403]  __sys_sendmsg+0xea/0x1b0
      [ 1010.716409]  ? __sys_sendmsg_sock+0x40/0x40
      [ 1010.716419]  ? lockdep_hardirqs_on_prepare+0x2b3/0x430
      [ 1010.716425]  ? syscall_enter_from_user_mode+0x1d/0x60
      [ 1010.716432]  do_syscall_64+0x30/0x40
      [ 1010.716438]  entry_SYSCALL_64_after_hwframe+0x62/0xc7
      [ 1010.716444] RIP: 0033:0x7fd1508cbd49
      [ 1010.716452] Code: 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 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 8b 0d ef 70 0d 00 f7 d8 64 89 01 48
      [ 1010.716456] RSP: 002b:00007fff18872348 EFLAGS: 00000202 ORIG_RAX: 000000000000002e
      [ 1010.716463] RAX: ffffffffffffffda RBX: 000055f72bf0eac0 RCX: 00007fd1508cbd49
      [ 1010.716468] RDX: 0000000000000000 RSI: 0000000020000280 RDI: 0000000000000006
      [ 1010.716473] RBP: 00007fff18872360 R08: 00007fff18872360 R09: 00007fff18872360
      [ 1010.716478] R10: 00007fff18872360 R11: 0000000000000202 R12: 000055f72bf0e1b0
      [ 1010.716482] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
      [ 1010.716491] Modules linked in: gtp(+) udp_tunnel ib_core uinput af_packet rfkill qrtr joydev hid_generic usbhid hid kvm_intel iTCO_wdt intel_pmc_bxt iTCO_vendor_support kvm snd_hda_codec_generic ledtrig_audio irqbypass crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel snd_hda_intel nls_utf8 snd_intel_dspcfg nls_cp866 psmouse aesni_intel vfat crypto_simd fat cryptd glue_helper snd_hda_codec pcspkr snd_hda_core i2c_i801 snd_hwdep i2c_smbus xhci_pci snd_pcm lpc_ich xhci_pci_renesas xhci_hcd qemu_fw_cfg tiny_power_button button sch_fq_codel vboxvideo drm_vram_helper drm_ttm_helper ttm vboxsf vboxguest snd_seq_midi snd_seq_midi_event snd_seq snd_rawmidi snd_seq_device snd_timer snd soundcore msr fuse efi_pstore dm_mod ip_tables x_tables autofs4 virtio_gpu virtio_dma_buf drm_kms_helper cec rc_core drm virtio_rng virtio_scsi rng_core virtio_balloon virtio_blk virtio_net virtio_console net_failover failover ahci libahci libata evdev scsi_mod input_leds serio_raw virtio_pci intel_agp
      [ 1010.716674]  virtio_ring intel_gtt virtio [last unloaded: gtp]
      [ 1010.716693] ---[ end trace 04990a4ce61e174b ]---
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAlexander Ofitserov <oficerovas@altlinux.org>
      Fixes: 459aa660 ("gtp: add initial driver for datapath of GPRS Tunneling Protocol (GTP-U)")
      Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
      Link: https://lore.kernel.org/r/20240228114703.465107-1-oficerovas@altlinux.org
      
      
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e668b92a
    • Tetsuo Handa's avatar
      tomoyo: fix UAF write bug in tomoyo_write_control() · a23ac178
      Tetsuo Handa authored
      
      commit 2f03fc34 upstream.
      
      Since tomoyo_write_control() updates head->write_buf when write()
      of long lines is requested, we need to fetch head->write_buf after
      head->io_sem is held.  Otherwise, concurrent write() requests can
      cause use-after-free-write and double-free problems.
      
      Reported-by: default avatarSam Sun <samsun1006219@gmail.com>
      Closes: https://lkml.kernel.org/r/CAEkJfYNDspuGxYx5kym8Lvp--D36CMDUErg4rxfWFJuPbbji8g@mail.gmail.com
      
      
      Fixes: bd03a3e4 ("TOMOYO: Add policy namespace support.")
      Cc:  <stable@vger.kernel.org> # Linux 3.1+
      Signed-off-by: default avatarTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a23ac178
    • Dimitris Vlachos's avatar
      riscv: Sparse-Memory/vmemmap out-of-bounds fix · 8af1c121
      Dimitris Vlachos authored
      
      [ Upstream commit a11dd49d ]
      
      Offset vmemmap so that the first page of vmemmap will be mapped
      to the first page of physical memory in order to ensure that
      vmemmap’s bounds will be respected during
      pfn_to_page()/page_to_pfn() operations.
      The conversion macros will produce correct SV39/48/57 addresses
      for every possible/valid DRAM_BASE inside the physical memory limits.
      
      v2:Address Alex's comments
      
      Suggested-by: default avatarAlexandre Ghiti <alexghiti@rivosinc.com>
      Signed-off-by: default avatarDimitris Vlachos <dvlachos@ics.forth.gr>
      Reported-by: default avatarDimitris Vlachos <dvlachos@ics.forth.gr>
      Closes: https://lore.kernel.org/linux-riscv/20240202135030.42265-1-csd4492@csd.uoc.gr
      
      
      Fixes: d95f1a54 ("RISC-V: Implement sparsemem")
      Reviewed-by: default avatarAlexandre Ghiti <alexghiti@rivosinc.com>
      Link: https://lore.kernel.org/r/20240229191723.32779-1-dvlachos@ics.forth.gr
      
      
      Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8af1c121
    • David Howells's avatar
      afs: Fix endless loop in directory parsing · 96370ba3
      David Howells authored
      [ Upstream commit 5f7a0764 ]
      
      If a directory has a block with only ".__afsXXXX" files in it (from
      uncompleted silly-rename), these .__afsXXXX files are skipped but without
      advancing the file position in the dir_context.  This leads to
      afs_dir_iterate() repeating the block again and again.
      
      Fix this by making the code that skips the .__afsXXXX file also manually
      advance the file position.
      
      The symptoms are a soft lookup:
      
              watchdog: BUG: soft lockup - CPU#3 stuck for 52s! [check:5737]
              ...
              RIP: 0010:afs_dir_iterate_block+0x39/0x1fd
              ...
               ? watchdog_timer_fn+0x1a6/0x213
              ...
               ? asm_sysvec_apic_timer_interrupt+0x16/0x20
               ? afs_dir_iterate_block+0x39/0x1fd
               afs_dir_iterate+0x10a/0x148
               afs_readdir+0x30/0x4a
               iterate_dir+0x93/0xd3
               __do_sys_getdents64+0x6b/0xd4
      
      This is almost certainly the actual fix for:
      
              https://bugzilla.kernel.org/show_bug.cgi?id=218496
      
      
      
      Fixes: 57e9d49c ("afs: Hide silly-rename files from userspace")
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Link: https://lore.kernel.org/r/786185.1708694102@warthog.procyon.org.uk
      
      
      Reviewed-by: default avatarMarc Dionne <marc.dionne@auristor.com>
      cc: Marc Dionne <marc.dionne@auristor.com>
      cc: Markus Suvanto <markus.suvanto@gmail.com>
      cc: linux-afs@lists.infradead.org
      Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      96370ba3
    • Takashi Iwai's avatar
      ALSA: Drop leftover snd-rtctimer stuff from Makefile · 14aacfcd
      Takashi Iwai authored
      [ Upstream commit 4df49712 ]
      
      We forgot to remove the line for snd-rtctimer from Makefile while
      dropping the functionality.  Get rid of the stale line.
      
      Fixes: 34ce71a9 ("ALSA: timer: remove legacy rtctimer")
      Link: https://lore.kernel.org/r/20240221092156.28695-1-tiwai@suse.de
      
      
      Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      14aacfcd
    • Hans de Goede's avatar
      power: supply: bq27xxx-i2c: Do not free non existing IRQ · d7acc4a5
      Hans de Goede authored
      
      [ Upstream commit 2df70149 ]
      
      The bq27xxx i2c-client may not have an IRQ, in which case
      client->irq will be 0. bq27xxx_battery_i2c_probe() already has
      an if (client->irq) check wrapping the request_threaded_irq().
      
      But bq27xxx_battery_i2c_remove() unconditionally calls
      free_irq(client->irq) leading to:
      
      [  190.310742] ------------[ cut here ]------------
      [  190.310843] Trying to free already-free IRQ 0
      [  190.310861] WARNING: CPU: 2 PID: 1304 at kernel/irq/manage.c:1893 free_irq+0x1b8/0x310
      
      Followed by a backtrace when unbinding the driver. Add
      an if (client->irq) to bq27xxx_battery_i2c_remove() mirroring
      probe() to fix this.
      
      Fixes: 444ff007 ("power: supply: bq27xxx: Fix I2C IRQ race on remove")
      Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
      Link: https://lore.kernel.org/r/20240215155133.70537-1-hdegoede@redhat.com
      
      
      Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      d7acc4a5
    • Arnd Bergmann's avatar
      efi/capsule-loader: fix incorrect allocation size · 537e3f49
      Arnd Bergmann authored
      
      [ Upstream commit fccfa646 ]
      
      gcc-14 notices that the allocation with sizeof(void) on 32-bit architectures
      is not enough for a 64-bit phys_addr_t:
      
      drivers/firmware/efi/capsule-loader.c: In function 'efi_capsule_open':
      drivers/firmware/efi/capsule-loader.c:295:24: error: allocation of insufficient size '4' for type 'phys_addr_t' {aka 'long long unsigned int'} with size '8' [-Werror=alloc-size]
        295 |         cap_info->phys = kzalloc(sizeof(void *), GFP_KERNEL);
            |                        ^
      
      Use the correct type instead here.
      
      Fixes: f24c4d47 ("efi/capsule-loader: Reinstate virtual capsule mapping")
      Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
      Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      537e3f49
    • Lin Ma's avatar
      rtnetlink: fix error logic of IFLA_BRIDGE_FLAGS writing back · 882a51a1
      Lin Ma authored
      
      [ Upstream commit 743ad091 ]
      
      In the commit d73ef2d6 ("rtnetlink: let rtnl_bridge_setlink checks
      IFLA_BRIDGE_MODE length"), an adjustment was made to the old loop logic
      in the function `rtnl_bridge_setlink` to enable the loop to also check
      the length of the IFLA_BRIDGE_MODE attribute. However, this adjustment
      removed the `break` statement and led to an error logic of the flags
      writing back at the end of this function.
      
      if (have_flags)
          memcpy(nla_data(attr), &flags, sizeof(flags));
          // attr should point to IFLA_BRIDGE_FLAGS NLA !!!
      
      Before the mentioned commit, the `attr` is granted to be IFLA_BRIDGE_FLAGS.
      However, this is not necessarily true fow now as the updated loop will let
      the attr point to the last NLA, even an invalid NLA which could cause
      overflow writes.
      
      This patch introduces a new variable `br_flag` to save the NLA pointer
      that points to IFLA_BRIDGE_FLAGS and uses it to resolve the mentioned
      error logic.
      
      Fixes: d73ef2d6 ("rtnetlink: let rtnl_bridge_setlink checks IFLA_BRIDGE_MODE length")
      Signed-off-by: default avatarLin Ma <linma@zju.edu.cn>
      Acked-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
      Link: https://lore.kernel.org/r/20240227121128.608110-1-linma@zju.edu.cn
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      882a51a1
    • Ignat Korchagin's avatar
      netfilter: nf_tables: allow NFPROTO_INET in nft_(match/target)_validate() · 80fabcd5
      Ignat Korchagin authored
      [ Upstream commit 7e0f122c ]
      
      Commit d0009eff ("netfilter: nf_tables: validate NFPROTO_* family") added
      some validation of NFPROTO_* families in the nft_compat module, but it broke
      the ability to use legacy iptables modules in dual-stack nftables.
      
      While with legacy iptables one had to independently manage IPv4 and IPv6
      tables, with nftables it is possible to have dual-stack tables sharing the
      rules. Moreover, it was possible to use rules based on legacy iptables
      match/target modules in dual-stack nftables.
      
      As an example, the program from [2] creates an INET dual-stack family table
      using an xt_bpf based rule, which looks like the following (the actual output
      was generated with a patched nft tool as the current nft tool does not parse
      dual stack tables with legacy match rules, so consider it for illustrative
      purposes only):
      
      table inet testfw {
        chain input {
          type filter hook prerouting priority filter; policy accept;
          bytecode counter packets 0 bytes 0 accept
        }
      }
      
      After d0009eff ("netfilter: nf_tables: validate NFPROTO_* family") we get
      EOPNOTSUPP for the above program.
      
      Fix this by allowing NFPROTO_INET for nft_(match/target)_validate(), but also
      restrict the functions to classic iptables hooks.
      
      Changes in v3:
        * clarify that upstream nft will not display such configuration properly and
          that the output was generated with a patched nft tool
        * remove example program from commit description and link to it instead
        * no code changes otherwise
      
      Changes in v2:
        * restrict nft_(match/target)_validate() to classic iptables hooks
        * rewrite example program to use unmodified libnftnl
      
      Fixes: d0009eff ("netfilter: nf_tables: validate NFPROTO_* family")
      Link: https://lore.kernel.org/all/Zc1PfoWN38UuFJRI@calendula/T/#mc947262582c90fec044c7a3398cc92fac7afea72 [1]
      Link: https://lore.kernel.org/all/20240220145509.53357-1-ignat@cloudflare.com/
      
       [2]
      Reported-by: default avatarJordan Griege <jgriege@cloudflare.com>
      Signed-off-by: default avatarIgnat Korchagin <ignat@cloudflare.com>
      Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      80fabcd5
    • Kai-Heng Feng's avatar
      Bluetooth: Enforce validation on max value of connection interval · e24acaef
      Kai-Heng Feng authored
      [ Upstream commit e4b01951 ]
      
      Right now Linux BT stack cannot pass test case "GAP/CONN/CPUP/BV-05-C
      'Connection Parameter Update Procedure Invalid Parameters Central
      Responder'" in Bluetooth Test Suite revision GAP.TS.p44. [0]
      
      That was revoled by commit c49a8682 ("Bluetooth: validate BLE
      connection interval updates"), but later got reverted due to devices
      like keyboards and mice may require low connection interval.
      
      So only validate the max value connection interval to pass the Test
      Suite, and let devices to request low connection interval if needed.
      
      [0] https://www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=229869
      
      
      
      Fixes: 68d19d7d ("Revert "Bluetooth: validate BLE connection interval updates"")
      Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e24acaef
    • Luiz Augusto von Dentz's avatar
      Bluetooth: hci_event: Fix handling of HCI_EV_IO_CAPA_REQUEST · df193568
      Luiz Augusto von Dentz authored
      [ Upstream commit 7e74aa53 ]
      
      If we received HCI_EV_IO_CAPA_REQUEST while
      HCI_OP_READ_REMOTE_EXT_FEATURES is yet to be responded assume the remote
      does support SSP since otherwise this event shouldn't be generated.
      
      Link: https://lore.kernel.org/linux-bluetooth/CABBYNZ+9UdG1cMZVmdtN3U2aS16AKMCyTARZZyFX7xTEDWcMOw@mail.gmail.com/T/#t
      
      
      Fixes: c7f59461 ("Bluetooth: Fix a refcnt underflow problem for hci_conn")
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      df193568
    • Zijun Hu's avatar
      Bluetooth: hci_event: Fix wrongly recorded wakeup BD_ADDR · 0309b68a
      Zijun Hu authored
      
      [ Upstream commit 61a5ab72 ]
      
      hci_store_wake_reason() wrongly parses event HCI_Connection_Request
      as HCI_Connection_Complete and HCI_Connection_Complete as
      HCI_Connection_Request, so causes recording wakeup BD_ADDR error and
      potential stability issue, fix it by using the correct field.
      
      Fixes: 2f20216c ("Bluetooth: Emit controller suspend and resume events")
      Signed-off-by: default avatarZijun Hu <quic_zijuhu@quicinc.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0309b68a
    • Ying Hsu's avatar
      Bluetooth: Avoid potential use-after-free in hci_error_reset · 6dd0a9df
      Ying Hsu authored
      
      [ Upstream commit 2449007d ]
      
      While handling the HCI_EV_HARDWARE_ERROR event, if the underlying
      BT controller is not responding, the GPIO reset mechanism would
      free the hci_dev and lead to a use-after-free in hci_error_reset.
      
      Here's the call trace observed on a ChromeOS device with Intel AX201:
         queue_work_on+0x3e/0x6c
         __hci_cmd_sync_sk+0x2ee/0x4c0 [bluetooth <HASH:3b4a6>]
         ? init_wait_entry+0x31/0x31
         __hci_cmd_sync+0x16/0x20 [bluetooth <HASH:3b4a 6>]
         hci_error_reset+0x4f/0xa4 [bluetooth <HASH:3b4a 6>]
         process_one_work+0x1d8/0x33f
         worker_thread+0x21b/0x373
         kthread+0x13a/0x152
         ? pr_cont_work+0x54/0x54
         ? kthread_blkcg+0x31/0x31
          ret_from_fork+0x1f/0x30
      
      This patch holds the reference count on the hci_dev while processing
      a HCI_EV_HARDWARE_ERROR event to avoid potential crash.
      
      Fixes: c7741d16 ("Bluetooth: Perform a power cycle when receiving hardware error event")
      Signed-off-by: default avatarYing Hsu <yinghsu@chromium.org>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6dd0a9df
    • Javier Carrasco's avatar
      net: usb: dm9601: fix wrong return value in dm9601_mdio_read · 6782a54e
      Javier Carrasco authored
      
      [ Upstream commit c68b2c9e ]
      
      The MII code does not check the return value of mdio_read (among
      others), and therefore no error code should be sent. A previous fix to
      the use of an uninitialized variable propagates negative error codes,
      that might lead to wrong operations by the MII library.
      
      An example of such issues is the use of mii_nway_restart by the dm9601
      driver. The mii_nway_restart function does not check the value returned
      by mdio_read, which in this case might be a negative number which could
      contain the exact bit the function checks (BMCR_ANENABLE = 0x1000).
      
      Return zero in case of error, as it is common practice in users of
      mdio_read to avoid wrong uses of the return value.
      
      Fixes: 8f8abb86 ("net: usb: dm9601: fix uninitialized variable use in dm9601_mdio_read")
      Signed-off-by: default avatarJavier Carrasco <javier.carrasco.cruz@gmail.com>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Reviewed-by: default avatarPeter Korsgaard <peter@korsgaard.com>
      Link: https://lore.kernel.org/r/20240225-dm9601_ret_err-v1-1-02c1d959ea59@gmail.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6782a54e
    • Oleksij Rempel's avatar
      lan78xx: enable auto speed configuration for LAN7850 if no EEPROM is detected · c1c7396b
      Oleksij Rempel authored
      
      [ Upstream commit 0e67899a ]
      
      Same as LAN7800, LAN7850 can be used without EEPROM. If EEPROM is not
      present or not flashed, LAN7850 will fail to sync the speed detected by the PHY
      with the MAC. In case link speed is 100Mbit, it will accidentally work,
      otherwise no data can be transferred.
      
      Better way would be to implement link_up callback, or set auto speed
      configuration unconditionally. But this changes would be more intrusive.
      So, for now, set it only if no EEPROM is found.
      
      Fixes: e69647a1 ("lan78xx: Set ASD in MAC_CR when EEE is enabled.")
      Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Link: https://lore.kernel.org/r/20240222123839.2816561-1-o.rempel@pengutronix.de
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c1c7396b
    • Eric Dumazet's avatar
      ipv6: fix potential "struct net" leak in inet6_rtm_getaddr() · 810fa7d5
      Eric Dumazet authored
      
      [ Upstream commit 10bfd453 ]
      
      It seems that if userspace provides a correct IFA_TARGET_NETNSID value
      but no IFA_ADDRESS and IFA_LOCAL attributes, inet6_rtm_getaddr()
      returns -EINVAL with an elevated "struct net" refcount.
      
      Fixes: 6ecf4c37 ("ipv6: enable IFA_TARGET_NETNSID for RTM_GETADDR")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Christian Brauner <brauner@kernel.org>
      Cc: David Ahern <dsahern@kernel.org>
      Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      810fa7d5
    • Yunjian Wang's avatar
      tun: Fix xdp_rxq_info's queue_index when detaching · 906986fe
      Yunjian Wang authored
      
      [ Upstream commit 2a770cdc ]
      
      When a queue(tfile) is detached, we only update tfile's queue_index,
      but do not update xdp_rxq_info's queue_index. This patch fixes it.
      
      Fixes: 8bf5c4ee ("tun: setup xdp_rxq_info")
      Signed-off-by: default avatarYunjian Wang <wangyunjian@huawei.com>
      Link: https://lore.kernel.org/r/1708398727-46308-1-git-send-email-wangyunjian@huawei.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      906986fe
    • Florian Westphal's avatar
      net: ip_tunnel: prevent perpetual headroom growth · 2e95350f
      Florian Westphal authored
      
      [ Upstream commit 5ae1e992 ]
      
      syzkaller triggered following kasan splat:
      BUG: KASAN: use-after-free in __skb_flow_dissect+0x19d1/0x7a50 net/core/flow_dissector.c:1170
      Read of size 1 at addr ffff88812fb4000e by task syz-executor183/5191
      [..]
       kasan_report+0xda/0x110 mm/kasan/report.c:588
       __skb_flow_dissect+0x19d1/0x7a50 net/core/flow_dissector.c:1170
       skb_flow_dissect_flow_keys include/linux/skbuff.h:1514 [inline]
       ___skb_get_hash net/core/flow_dissector.c:1791 [inline]
       __skb_get_hash+0xc7/0x540 net/core/flow_dissector.c:1856
       skb_get_hash include/linux/skbuff.h:1556 [inline]
       ip_tunnel_xmit+0x1855/0x33c0 net/ipv4/ip_tunnel.c:748
       ipip_tunnel_xmit+0x3cc/0x4e0 net/ipv4/ipip.c:308
       __netdev_start_xmit include/linux/netdevice.h:4940 [inline]
       netdev_start_xmit include/linux/netdevice.h:4954 [inline]
       xmit_one net/core/dev.c:3548 [inline]
       dev_hard_start_xmit+0x13d/0x6d0 net/core/dev.c:3564
       __dev_queue_xmit+0x7c1/0x3d60 net/core/dev.c:4349
       dev_queue_xmit include/linux/netdevice.h:3134 [inline]
       neigh_connected_output+0x42c/0x5d0 net/core/neighbour.c:1592
       ...
       ip_finish_output2+0x833/0x2550 net/ipv4/ip_output.c:235
       ip_finish_output+0x31/0x310 net/ipv4/ip_output.c:323
       ..
       iptunnel_xmit+0x5b4/0x9b0 net/ipv4/ip_tunnel_core.c:82
       ip_tunnel_xmit+0x1dbc/0x33c0 net/ipv4/ip_tunnel.c:831
       ipgre_xmit+0x4a1/0x980 net/ipv4/ip_gre.c:665
       __netdev_start_xmit include/linux/netdevice.h:4940 [inline]
       netdev_start_xmit include/linux/netdevice.h:4954 [inline]
       xmit_one net/core/dev.c:3548 [inline]
       dev_hard_start_xmit+0x13d/0x6d0 net/core/dev.c:3564
       ...
      
      The splat occurs because skb->data points past skb->head allocated area.
      This is because neigh layer does:
        __skb_pull(skb, skb_network_offset(skb));
      
      ... but skb_network_offset() returns a negative offset and __skb_pull()
      arg is unsigned.  IOW, we skb->data gets "adjusted" by a huge value.
      
      The negative value is returned because skb->head and skb->data distance is
      more than 64k and skb->network_header (u16) has wrapped around.
      
      The bug is in the ip_tunnel infrastructure, which can cause
      dev->needed_headroom to increment ad infinitum.
      
      The syzkaller reproducer consists of packets getting routed via a gre
      tunnel, and route of gre encapsulated packets pointing at another (ipip)
      tunnel.  The ipip encapsulation finds gre0 as next output device.
      
      This results in the following pattern:
      
      1). First packet is to be sent out via gre0.
      Route lookup found an output device, ipip0.
      
      2).
      ip_tunnel_xmit for gre0 bumps gre0->needed_headroom based on the future
      output device, rt.dev->needed_headroom (ipip0).
      
      3).
      ip output / start_xmit moves skb on to ipip0. which runs the same
      code path again (xmit recursion).
      
      4).
      Routing step for the post-gre0-encap packet finds gre0 as output device
      to use for ipip0 encapsulated packet.
      
      tunl0->needed_headroom is then incremented based on the (already bumped)
      gre0 device headroom.
      
      This repeats for every future packet:
      
      gre0->needed_headroom gets inflated because previous packets' ipip0 step
      incremented rt->dev (gre0) headroom, and ipip0 incremented because gre0
      needed_headroom was increased.
      
      For each subsequent packet, gre/ipip0->needed_headroom grows until
      post-expand-head reallocations result in a skb->head/data distance of
      more than 64k.
      
      Once that happens, skb->network_header (u16) wraps around when
      pskb_expand_head tries to make sure that skb_network_offset() is unchanged
      after the headroom expansion/reallocation.
      
      After this skb_network_offset(skb) returns a different (and negative)
      result post headroom expansion.
      
      The next trip to neigh layer (or anything else that would __skb_pull the
      network header) makes skb->data point to a memory location outside
      skb->head area.
      
      v2: Cap the needed_headroom update to an arbitarily chosen upperlimit to
      prevent perpetual increase instead of dropping the headroom increment
      completely.
      
      Reported-and-tested-by: default avatar <syzbot+bfde3bef047a81b8fde6@syzkaller.appspotmail.com>
      Closes: https://groups.google.com/g/syzkaller-bugs/c/fL9G6GtWskY/m/VKk_PR5FBAAJ
      
      
      Fixes: 243aad83 ("ip_gre: include route header_len in max_headroom calculation")
      Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Link: https://lore.kernel.org/r/20240220135606.4939-1-fw@strlen.de
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      2e95350f
    • Ryosuke Yasuoka's avatar
      netlink: Fix kernel-infoleak-after-free in __skb_datagram_iter · f19d1f98
      Ryosuke Yasuoka authored
      
      [ Upstream commit 661779e1 ]
      
      syzbot reported the following uninit-value access issue [1]:
      
      netlink_to_full_skb() creates a new `skb` and puts the `skb->data`
      passed as a 1st arg of netlink_to_full_skb() onto new `skb`. The data
      size is specified as `len` and passed to skb_put_data(). This `len`
      is based on `skb->end` that is not data offset but buffer offset. The
      `skb->end` contains data and tailroom. Since the tailroom is not
      initialized when the new `skb` created, KMSAN detects uninitialized
      memory area when copying the data.
      
      This patch resolved this issue by correct the len from `skb->end` to
      `skb->len`, which is the actual data offset.
      
      BUG: KMSAN: kernel-infoleak-after-free in instrument_copy_to_user include/linux/instrumented.h:114 [inline]
      BUG: KMSAN: kernel-infoleak-after-free in copy_to_user_iter lib/iov_iter.c:24 [inline]
      BUG: KMSAN: kernel-infoleak-after-free in iterate_ubuf include/linux/iov_iter.h:29 [inline]
      BUG: KMSAN: kernel-infoleak-after-free in iterate_and_advance2 include/linux/iov_iter.h:245 [inline]
      BUG: KMSAN: kernel-infoleak-after-free in iterate_and_advance include/linux/iov_iter.h:271 [inline]
      BUG: KMSAN: kernel-infoleak-after-free in _copy_to_iter+0x364/0x2520 lib/iov_iter.c:186
       instrument_copy_to_user include/linux/instrumented.h:114 [inline]
       copy_to_user_iter lib/iov_iter.c:24 [inline]
       iterate_ubuf include/linux/iov_iter.h:29 [inline]
       iterate_and_advance2 include/linux/iov_iter.h:245 [inline]
       iterate_and_advance include/linux/iov_iter.h:271 [inline]
       _copy_to_iter+0x364/0x2520 lib/iov_iter.c:186
       copy_to_iter include/linux/uio.h:197 [inline]
       simple_copy_to_iter+0x68/0xa0 net/core/datagram.c:532
       __skb_datagram_iter+0x123/0xdc0 net/core/datagram.c:420
       skb_copy_datagram_iter+0x5c/0x200 net/core/datagram.c:546
       skb_copy_datagram_msg include/linux/skbuff.h:3960 [inline]
       packet_recvmsg+0xd9c/0x2000 net/packet/af_packet.c:3482
       sock_recvmsg_nosec net/socket.c:1044 [inline]
       sock_recvmsg net/socket.c:1066 [inline]
       sock_read_iter+0x467/0x580 net/socket.c:1136
       call_read_iter include/linux/fs.h:2014 [inline]
       new_sync_read fs/read_write.c:389 [inline]
       vfs_read+0x8f6/0xe00 fs/read_write.c:470
       ksys_read+0x20f/0x4c0 fs/read_write.c:613
       __do_sys_read fs/read_write.c:623 [inline]
       __se_sys_read fs/read_write.c:621 [inline]
       __x64_sys_read+0x93/0xd0 fs/read_write.c:621
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0x44/0x110 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x63/0x6b
      
      Uninit was stored to memory at:
       skb_put_data include/linux/skbuff.h:2622 [inline]
       netlink_to_full_skb net/netlink/af_netlink.c:181 [inline]
       __netlink_deliver_tap_skb net/netlink/af_netlink.c:298 [inline]
       __netlink_deliver_tap+0x5be/0xc90 net/netlink/af_netlink.c:325
       netlink_deliver_tap net/netlink/af_netlink.c:338 [inline]
       netlink_deliver_tap_kernel net/netlink/af_netlink.c:347 [inline]
       netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
       netlink_unicast+0x10f1/0x1250 net/netlink/af_netlink.c:1368
       netlink_sendmsg+0x1238/0x13d0 net/netlink/af_netlink.c:1910
       sock_sendmsg_nosec net/socket.c:730 [inline]
       __sock_sendmsg net/socket.c:745 [inline]
       ____sys_sendmsg+0x9c2/0xd60 net/socket.c:2584
       ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638
       __sys_sendmsg net/socket.c:2667 [inline]
       __do_sys_sendmsg net/socket.c:2676 [inline]
       __se_sys_sendmsg net/socket.c:2674 [inline]
       __x64_sys_sendmsg+0x307/0x490 net/socket.c:2674
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0x44/0x110 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x63/0x6b
      
      Uninit was created at:
       free_pages_prepare mm/page_alloc.c:1087 [inline]
       free_unref_page_prepare+0xb0/0xa40 mm/page_alloc.c:2347
       free_unref_page_list+0xeb/0x1100 mm/page_alloc.c:2533
       release_pages+0x23d3/0x2410 mm/swap.c:1042
       free_pages_and_swap_cache+0xd9/0xf0 mm/swap_state.c:316
       tlb_batch_pages_flush mm/mmu_gather.c:98 [inline]
       tlb_flush_mmu_free mm/mmu_gather.c:293 [inline]
       tlb_flush_mmu+0x6f5/0x980 mm/mmu_gather.c:300
       tlb_finish_mmu+0x101/0x260 mm/mmu_gather.c:392
       exit_mmap+0x49e/0xd30 mm/mmap.c:3321
       __mmput+0x13f/0x530 kernel/fork.c:1349
       mmput+0x8a/0xa0 kernel/fork.c:1371
       exit_mm+0x1b8/0x360 kernel/exit.c:567
       do_exit+0xd57/0x4080 kernel/exit.c:858
       do_group_exit+0x2fd/0x390 kernel/exit.c:1021
       __do_sys_exit_group kernel/exit.c:1032 [inline]
       __se_sys_exit_group kernel/exit.c:1030 [inline]
       __x64_sys_exit_group+0x3c/0x50 kernel/exit.c:1030
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0x44/0x110 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x63/0x6b
      
      Bytes 3852-3903 of 3904 are uninitialized
      Memory access of size 3904 starts at ffff88812ea1e000
      Data copied to user address 0000000020003280
      
      CPU: 1 PID: 5043 Comm: syz-executor297 Not tainted 6.7.0-rc5-syzkaller-00047-g5bd7ef53ffe5 #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/10/2023
      
      Fixes: 1853c949 ("netlink, mmap: transform mmap skb into full skb on taps")
      Reported-and-tested-by: default avatar <syzbot+34ad5fab48f7bf510349@syzkaller.appspotmail.com>
      Closes: https://syzkaller.appspot.com/bug?extid=34ad5fab48f7bf510349
      
       [1]
      Signed-off-by: default avatarRyosuke Yasuoka <ryasuoka@redhat.com>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Link: https://lore.kernel.org/r/20240221074053.1794118-1-ryasuoka@redhat.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f19d1f98
    • Han Xu's avatar
      mtd: spinand: gigadevice: Fix the get ecc status issue · acd9f6d4
      Han Xu authored
      
      [ Upstream commit 59950610 ]
      
      Some GigaDevice ecc_get_status functions use on-stack buffer for
      spi_mem_op causes spi_mem_check_op failing, fix the issue by using
      spinand scratchbuf.
      
      Fixes: c40c7a99 ("mtd: spinand: Add support for GigaDevice GD5F1GQ4UExxG")
      Signed-off-by: default avatarHan Xu <han.xu@nxp.com>
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20231108150701.593912-1-han.xu@nxp.com
      
      
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      acd9f6d4
    • Reto Schneider's avatar
      mtd: spinand: gigadevice: Support GD5F1GQ5UExxG · 8e3a8675
      Reto Schneider authored
      
      [ Upstream commit 469b9924 ]
      
      The relevant changes to the already existing GD5F1GQ4UExxG support has
      been determined by consulting the GigaDevice product change notice
      AN-0392-10, version 1.0 from November 30, 2020.
      
      As the overlaps are huge, variable names have been generalized
      accordingly.
      
      Apart from the lowered ECC strength (4 instead of 8 bits per 512 bytes),
      the new device ID, and the extra quad IO dummy byte, no changes had to
      be taken into account.
      
      New hardware features are not supported, namely:
       - Power on reset
       - Unique ID
       - Double transfer rate (DTR)
       - Parameter page
       - Random data quad IO
      
      The inverted semantic of the "driver strength" register bits, defaulting
      to 100% instead of 50% for the Q5 devices, got ignored as the driver has
      never touched them anyway.
      
      The no longer supported "read from cache during block erase"
      functionality is not reflected as the current SPI NAND core does not
      support it anyway.
      
      Implementation has been tested on MediaTek MT7688 based GARDENA smart
      Gateways using both, GigaDevice GD5F1GQ5UEYIG and GD5F1GQ4UBYIG.
      
      Signed-off-by: default avatarReto Schneider <reto.schneider@husqvarnagroup.com>
      Reviewed-by: default avatarFrieder Schrempf <frieder.schrempf@kontron.de>
      Reviewed-by: default avatarStefan Roese <sr@denx.de>
      Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
      Link: https://lore.kernel.org/linux-mtd/20210211113619.3502-1-code@reto-schneider.ch
      
      
      Stable-dep-of: 59950610 ("mtd: spinand: gigadevice: Fix the get ecc status issue")
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8e3a8675
    • zhenwei pi's avatar
      crypto: virtio/akcipher - Fix stack overflow on memcpy · 37077ed1
      zhenwei pi authored
      [ Upstream commit c0ec2a71 ]
      
      sizeof(struct virtio_crypto_akcipher_session_para) is less than
      sizeof(struct virtio_crypto_op_ctrl_req::u), copying more bytes from
      stack variable leads stack overflow. Clang reports this issue by
      commands:
      make -j CC=clang-14 mrproper >/dev/null 2>&1
      make -j O=/tmp/crypto-build CC=clang-14 allmodconfig >/dev/null 2>&1
      make -j O=/tmp/crypto-build W=1 CC=clang-14 drivers/crypto/virtio/
        virtio_crypto_akcipher_algs.o
      
      Fixes: 59ca6c93 ("virtio-crypto: implement RSA algorithm")
      Link: https://lore.kernel.org/all/0a194a79-e3a3-45e7-be98-83abd3e1cb7e@roeck-us.net/
      
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarzhenwei pi <pizhenwei@bytedance.com>
      Tested-by: Nathan Chancellor <nathan@kernel.org> # build
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Acked-by: default avatarJason Wang <jasowang@redhat.com>
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      37077ed1
Loading