Skip to content
Snippets Groups Projects
This project is mirrored from https://git.kernel.org/pub/scm/linux/kernel/git/rt/linux-rt-devel.git. Pull mirroring updated .
  1. Feb 08, 2025
    • Greg Kroah-Hartman's avatar
    • Jakub Kicinski's avatar
      ethtool: ntuple: fix rss + ring_cookie check · 333f1282
      Jakub Kicinski authored
      
      commit 2b91cc1214b165c25ac9b0885db89a0d3224028a upstream.
      
      The info.flow_type is for RXFH commands, ntuple flow_type is inside
      the flow spec. The check currently does nothing, as info.flow_type
      is 0 (or even uninitialized by user space) for ETHTOOL_SRXCLSRLINS.
      
      Fixes: 9e43ad7a ("net: ethtool: only allow set_rxnfc with rss + ring_cookie if driver opts in")
      Reviewed-by: default avatarGal Pressman <gal@nvidia.com>
      Reviewed-by: default avatarJoe Damato <jdamato@fastly.com>
      Link: https://patch.msgid.link/20250201013040.725123-3-kuba@kernel.org
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      333f1282
    • Wenruo Qu's avatar
      btrfs: do proper folio cleanup when run_delalloc_nocow() failed · 5ae72abb
      Wenruo Qu authored
      
      commit c2b47df8 upstream.
      
      [BUG]
      With CONFIG_DEBUG_VM set, test case generic/476 has some chance to crash
      with the following VM_BUG_ON_FOLIO():
      
        BTRFS error (device dm-3): cow_file_range failed, start 1146880 end 1253375 len 106496 ret -28
        BTRFS error (device dm-3): run_delalloc_nocow failed, start 1146880 end 1253375 len 106496 ret -28
        page: refcount:4 mapcount:0 mapping:00000000592787cc index:0x12 pfn:0x10664
        aops:btrfs_aops [btrfs] ino:101 dentry name(?):"f1774"
        flags: 0x2fffff80004028(uptodate|lru|private|node=0|zone=2|lastcpupid=0xfffff)
        page dumped because: VM_BUG_ON_FOLIO(!folio_test_locked(folio))
        ------------[ cut here ]------------
        kernel BUG at mm/page-writeback.c:2992!
        Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
        CPU: 2 UID: 0 PID: 3943513 Comm: kworker/u24:15 Tainted: G           OE      6.12.0-rc7-custom+ #87
        Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
        Hardware name: QEMU KVM Virtual Machine, BIOS unknown 2/2/2022
        Workqueue: events_unbound btrfs_async_reclaim_data_space [btrfs]
        pc : folio_clear_dirty_for_io+0x128/0x258
        lr : folio_clear_dirty_for_io+0x128/0x258
        Call trace:
         folio_clear_dirty_for_io+0x128/0x258
         btrfs_folio_clamp_clear_dirty+0x80/0xd0 [btrfs]
         __process_folios_contig+0x154/0x268 [btrfs]
         extent_clear_unlock_delalloc+0x5c/0x80 [btrfs]
         run_delalloc_nocow+0x5f8/0x760 [btrfs]
         btrfs_run_delalloc_range+0xa8/0x220 [btrfs]
         writepage_delalloc+0x230/0x4c8 [btrfs]
         extent_writepage+0xb8/0x358 [btrfs]
         extent_write_cache_pages+0x21c/0x4e8 [btrfs]
         btrfs_writepages+0x94/0x150 [btrfs]
         do_writepages+0x74/0x190
         filemap_fdatawrite_wbc+0x88/0xc8
         start_delalloc_inodes+0x178/0x3a8 [btrfs]
         btrfs_start_delalloc_roots+0x174/0x280 [btrfs]
         shrink_delalloc+0x114/0x280 [btrfs]
         flush_space+0x250/0x2f8 [btrfs]
         btrfs_async_reclaim_data_space+0x180/0x228 [btrfs]
         process_one_work+0x164/0x408
         worker_thread+0x25c/0x388
         kthread+0x100/0x118
         ret_from_fork+0x10/0x20
        Code: 910a8021 a90363f7 a9046bf9 94012379 (d4210000)
        ---[ end trace 0000000000000000 ]---
      
      [CAUSE]
      The first two lines of extra debug messages show the problem is caused
      by the error handling of run_delalloc_nocow().
      
      E.g. we have the following dirtied range (4K blocksize 4K page size):
      
          0                 16K                  32K
          |//////////////////////////////////////|
          |  Pre-allocated  |
      
      And the range [0, 16K) has a preallocated extent.
      
      - Enter run_delalloc_nocow() for range [0, 16K)
        Which found range [0, 16K) is preallocated, can do the proper NOCOW
        write.
      
      - Enter fallback_to_fow() for range [16K, 32K)
        Since the range [16K, 32K) is not backed by preallocated extent, we
        have to go COW.
      
      - cow_file_range() failed for range [16K, 32K)
        So cow_file_range() will do the clean up by clearing folio dirty,
        unlock the folios.
      
        Now the folios in range [16K, 32K) is unlocked.
      
      - Enter extent_clear_unlock_delalloc() from run_delalloc_nocow()
        Which is called with PAGE_START_WRITEBACK to start page writeback.
        But folios can only be marked writeback when it's properly locked,
        thus this triggered the VM_BUG_ON_FOLIO().
      
      Furthermore there is another hidden but common bug that
      run_delalloc_nocow() is not clearing the folio dirty flags in its error
      handling path.
      This is the common bug shared between run_delalloc_nocow() and
      cow_file_range().
      
      [FIX]
      - Clear folio dirty for range [@start, @cur_offset)
        Introduce a helper, cleanup_dirty_folios(), which
        will find and lock the folio in the range, clear the dirty flag and
        start/end the writeback, with the extra handling for the
        @locked_folio.
      
      - Introduce a helper to clear folio dirty, start and end writeback
      
      - Introduce a helper to record the last failed COW range end
        This is to trace which range we should skip, to avoid double
        unlocking.
      
      - Skip the failed COW range for the error handling
      
      CC: stable@vger.kernel.org
      Reviewed-by: default avatarBoris Burkov <boris@bur.io>
      Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5ae72abb
    • Tiezhu Yang's avatar
      LoongArch: Change 8 to 14 for LOONGARCH_MAX_{BRP,WRP} · 27a46e60
      Tiezhu Yang authored
      commit f502ea61 upstream.
      
      The maximum number of load/store watchpoints and fetch instruction
      watchpoints is 14 each according to LoongArch Reference Manual, so
      change 8 to 14 for the related code.
      
      Link: https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#control-and-status-registers-related-to-watchpoints
      
      
      Cc: stable@vger.kernel.org
      Fixes: edffa33c ("LoongArch: Add hardware breakpoints/watchpoints support")
      Reviewed-by: default avatarWANG Xuerui <git@xen0n.name>
      Signed-off-by: default avatarTiezhu Yang <yangtiezhu@loongson.cn>
      Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      27a46e60
    • Chen Ridong's avatar
      memcg: fix soft lockup in the OOM process · c3a3741d
      Chen Ridong authored
      commit ade81479 upstream.
      
      A soft lockup issue was found in the product with about 56,000 tasks were
      in the OOM cgroup, it was traversing them when the soft lockup was
      triggered.
      
      watchdog: BUG: soft lockup - CPU#2 stuck for 23s! [VM Thread:1503066]
      CPU: 2 PID: 1503066 Comm: VM Thread Kdump: loaded Tainted: G
      Hardware name: Huawei Cloud OpenStack Nova, BIOS
      RIP: 0010:console_unlock+0x343/0x540
      RSP: 0000:ffffb751447db9a0 EFLAGS: 00000247 ORIG_RAX: ffffffffffffff13
      RAX: 0000000000000001 RBX: 0000000000000000 RCX: 00000000ffffffff
      RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000247
      RBP: ffffffffafc71f90 R08: 0000000000000000 R09: 0000000000000040
      R10: 0000000000000080 R11: 0000000000000000 R12: ffffffffafc74bd0
      R13: ffffffffaf60a220 R14: 0000000000000247 R15: 0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f2fe6ad91f0 CR3: 00000004b2076003 CR4: 0000000000360ee0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       vprintk_emit+0x193/0x280
       printk+0x52/0x6e
       dump_task+0x114/0x130
       mem_cgroup_scan_tasks+0x76/0x100
       dump_header+0x1fe/0x210
       oom_kill_process+0xd1/0x100
       out_of_memory+0x125/0x570
       mem_cgroup_out_of_memory+0xb5/0xd0
       try_charge+0x720/0x770
       mem_cgroup_try_charge+0x86/0x180
       mem_cgroup_try_charge_delay+0x1c/0x40
       do_anonymous_page+0xb5/0x390
       handle_mm_fault+0xc4/0x1f0
      
      This is because thousands of processes are in the OOM cgroup, it takes a
      long time to traverse all of them.  As a result, this lead to soft lockup
      in the OOM process.
      
      To fix this issue, call 'cond_resched' in the 'mem_cgroup_scan_tasks'
      function per 1000 iterations.  For global OOM, call
      'touch_softlockup_watchdog' per 1000 iterations to avoid this issue.
      
      Link: https://lkml.kernel.org/r/20241224025238.3768787-1-chenridong@huaweicloud.com
      
      
      Fixes: 9cbb78bb ("mm, memcg: introduce own oom handler to iterate only over its own threads")
      Signed-off-by: default avatarChen Ridong <chenridong@huawei.com>
      Acked-by: default avatarMichal Hocko <mhocko@suse.com>
      Cc: Roman Gushchin <roman.gushchin@linux.dev>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Shakeel Butt <shakeelb@google.com>
      Cc: Muchun Song <songmuchun@bytedance.com>
      Cc: Michal Koutný <mkoutny@suse.com>
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      c3a3741d
    • Sean Christopherson's avatar
      KVM: x86: Plumb in the vCPU to kvm_x86_ops.hwapic_isr_update() · a9e31851
      Sean Christopherson authored
      
      commit 76bce9f1 upstream.
      
      Pass the target vCPU to the hwapic_isr_update() vendor hook so that VMX
      can defer the update until after nested VM-Exit if an EOI for L1's vAPIC
      occurs while L2 is active.
      
      Note, commit d39850f5 ("KVM: x86: Drop @vcpu parameter from
      kvm_x86_ops.hwapic_isr_update()") removed the parameter with the
      justification that doing so "allows for a decent amount of (future)
      cleanup in the APIC code", but it's not at all clear what cleanup was
      intended, or if it was ever realized.
      
      No functional change intended.
      
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarChao Gao <chao.gao@intel.com>
      Tested-by: default avatarChao Gao <chao.gao@intel.com>
      Link: https://lore.kernel.org/r/20241128000010.4051275-2-seanjc@google.com
      
      
      Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a9e31851
    • Aric Cyr's avatar
      drm/amd/display: Add hubp cache reset when powergating · 8eb4d51b
      Aric Cyr authored
      
      commit 01130f52 upstream.
      
      [Why]
      When HUBP is power gated, the SW state can get out of sync with the
      hardware state causing cursor to not be programmed correctly.
      
      [How]
      Similar to DPP, add a HUBP reset function which is called wherever
      HUBP is initialized or powergated.  This function will clear the cursor
      position and attribute cache allowing for proper programming when the
      HUBP is brought back up.
      
      Cc: Mario Limonciello <mario.limonciello@amd.com>
      Cc: Alex Deucher <alexander.deucher@amd.com>
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarSung Lee <sung.lee@amd.com>
      Signed-off-by: default avatarAric Cyr <Aric.Cyr@amd.com>
      Signed-off-by: default avatarWayne Lin <wayne.lin@amd.com>
      Tested-by: default avatarDaniel Wheeler <daniel.wheeler@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8eb4d51b
    • Nathan Chancellor's avatar
      s390: Add '-std=gnu11' to decompressor and purgatory CFLAGS · 593d852f
      Nathan Chancellor authored
      
      commit 3b8b80e9 upstream.
      
      GCC changed the default C standard dialect from gnu17 to gnu23,
      which should not have impacted the kernel because it explicitly requests
      the gnu11 standard in the main Makefile. However, there are certain
      places in the s390 code that use their own CFLAGS without a '-std='
      value, which break with this dialect change because of the kernel's own
      definitions of bool, false, and true conflicting with the C23 reserved
      keywords.
      
        include/linux/stddef.h:11:9: error: cannot use keyword 'false' as enumeration constant
           11 |         false   = 0,
              |         ^~~~~
        include/linux/stddef.h:11:9: note: 'false' is a keyword with '-std=c23' onwards
        include/linux/types.h:35:33: error: 'bool' cannot be defined via 'typedef'
           35 | typedef _Bool                   bool;
              |                                 ^~~~
        include/linux/types.h:35:33: note: 'bool' is a keyword with '-std=c23' onwards
      
      Add '-std=gnu11' to the decompressor and purgatory CFLAGS to eliminate
      these errors and make the C standard version of these areas match the
      rest of the kernel.
      
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarNathan Chancellor <nathan@kernel.org>
      Tested-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      Link: https://lore.kernel.org/r/20250122-s390-fix-std-for-gcc-15-v1-1-8b00cadee083@kernel.org
      
      
      Signed-off-by: default avatarAlexander Gordeev <agordeev@linux.ibm.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      593d852f
    • Claudiu Beznea's avatar
      ASoC: da7213: Initialize the mutex · ba30a82c
      Claudiu Beznea authored
      
      commit 4a32a38c upstream.
      
      Initialize the struct da7213_priv::ctrl_lock mutex. Without it the
      following stack trace is displayed when rebooting and lockdep is enabled:
      
      DEBUG_LOCKS_WARN_ON(lock->magic != lock)
      WARNING: CPU: 0 PID: 180 at kernel/locking/mutex.c:564 __mutex_lock+0x254/0x4e4
      CPU: 0 UID: 0 PID: 180 Comm: alsactl Not tainted 6.13.0-next-20250123-arm64-renesas-00002-g132083a22d3d #30
      Hardware name: Renesas SMARC EVK version 2 based on r9a08g045s33 (DT)
      pstate: 60400005 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : __mutex_lock+0x254/0x4e4
      lr : __mutex_lock+0x254/0x4e4
      sp : ffff800082c13c00
      x29: ffff800082c13c00 x28: ffff00001002b500 x27: 0000000000000000
      x26: 0000000000000000 x25: ffff800080b30db4 x24: 0000000000000002
      x23: ffff800082c13c70 x22: 0000ffffc2a68a70 x21: ffff000010348000
      x20: 0000000000000000 x19: ffff00000be2e488 x18: 0000000000000000
      x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
      x14: 00000000000003c1 x13: 00000000000003c1 x12: 0000000000000000
      x11: 0000000000000011 x10: 0000000000001420 x9 : ffff800082c13a70
      x8 : 0000000000000001 x7 : ffff800082c13a50 x6 : ffff800082c139e0
      x5 : ffff800082c14000 x4 : ffff800082c13a50 x3 : 0000000000000000
      x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff00001002b500
      Call trace:
        __mutex_lock+0x254/0x4e4 (P)
        mutex_lock_nested+0x20/0x28
        da7213_volsw_locked_get+0x34/0x60
        snd_ctl_elem_read+0xbc/0x114
        snd_ctl_ioctl+0x878/0xa70
        __arm64_sys_ioctl+0x94/0xc8
        invoke_syscall+0x44/0x104
        el0_svc_common.constprop.0+0xb4/0xd4
        do_el0_svc+0x18/0x20
        el0_svc+0x3c/0xf0
        el0t_64_sync_handler+0xc0/0xc4
        el0t_64_sync+0x154/0x158
       irq event stamp: 7713
       hardirqs last  enabled at (7713): [<ffff800080170d94>] ktime_get_coarse_real_ts64+0xf0/0x10c
       hardirqs last disabled at (7712): [<ffff800080170d58>] ktime_get_coarse_real_ts64+0xb4/0x10c
       softirqs last  enabled at (7550): [<ffff8000800179d4>] fpsimd_restore_current_state+0x30/0xb8
       softirqs last disabled at (7548): [<ffff8000800179a8>] fpsimd_restore_current_state+0x4/0xb8
       ---[ end trace 0000000000000000 ]---
      
      Fixes: 64c3259b ("ASoC: da7213: Add new kcontrol for tonegen")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea.uj@bp.renesas.com>
      Link: https://patch.msgid.link/20250123121036.70406-1-claudiu.beznea.uj@bp.renesas.com
      
      
      Signed-off-by: default avatarMark Brown <broonie@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ba30a82c
    • Leon Hwang's avatar
      selftests/bpf: Add test to verify tailcall and freplace restrictions · 141a2389
      Leon Hwang authored
      
      commit 021611d3 upstream.
      
      Add a test case to ensure that attaching a tail callee program with an
      freplace program fails, and that updating an extended program to a
      prog_array map is also prohibited.
      
      This test is designed to prevent the potential infinite loop issue caused
      by the combination of tail calls and freplace, ensuring the correct
      behavior and stability of the system.
      
      Additionally, fix the broken tailcalls/tailcall_freplace selftest
      because an extension prog should not be tailcalled.
      
      cd tools/testing/selftests/bpf; ./test_progs -t tailcalls
      337/25  tailcalls/tailcall_freplace:OK
      337/26  tailcalls/tailcall_bpf2bpf_freplace:OK
      337     tailcalls:OK
      Summary: 1/26 PASSED, 0 SKIPPED, 0 FAILED
      
      Acked-by: default avatarEduard Zingerman <eddyz87@gmail.com>
      Signed-off-by: default avatarLeon Hwang <leon.hwang@linux.dev>
      Link: https://lore.kernel.org/r/20241015150207.70264-3-leon.hwang@linux.dev
      
      
      Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
      [ Yifei: bpf freplace update is backported to linux-6.12 by commit 987aa730
        ("bpf: Prevent tailcall infinite loop caused by freplace"). It will cause
        selftest #336/25 failed. ]
      Signed-off-by: default avatarYifei Liu <yifei.l.liu@oracle.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      141a2389
    • Vasily Gorbik's avatar
      Revert "s390/mm: Allow large pages for KASAN shadow mapping" · 5f72bf80
      Vasily Gorbik authored
      
      commit cc00550b upstream.
      
      This reverts commit ff123eb7.
      
      Allowing large pages for KASAN shadow mappings isn't inherently wrong,
      but adding POPULATE_KASAN_MAP_SHADOW to large_allowed() exposes an issue
      in can_large_pud() and can_large_pmd().
      
      Since commit d8073dc6 ("s390/mm: Allow large pages only for aligned
      physical addresses"), both can_large_pud() and can_large_pmd() call _pa()
      to check if large page physical addresses are aligned. However, _pa()
      has a side effect: it allocates memory in POPULATE_KASAN_MAP_SHADOW
      mode. This results in massive memory leaks.
      
      The proper fix would be to address both large_allowed() and _pa()'s side
      effects, but for now, revert this change to avoid the leaks.
      
      Fixes: ff123eb7 ("s390/mm: Allow large pages for KASAN shadow mapping")
      Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5f72bf80
    • Gal Pressman's avatar
      ethtool: Fix access to uninitialized fields in set RXNFC command · 1cf21779
      Gal Pressman authored
      commit 94071909 upstream.
      
      The check for non-zero ring with RSS is only relevant for
      ETHTOOL_SRXCLSRLINS command, in other cases the check tries to access
      memory which was not initialized by the userspace tool. Only perform the
      check in case of ETHTOOL_SRXCLSRLINS.
      
      Without this patch, filter deletion (for example) could statistically
      result in a false error:
        # ethtool --config-ntuple eth3 delete 484
        rmgr: Cannot delete RX class rule: Invalid argument
        Cannot delete classification rule
      
      Fixes: 9e43ad7a ("net: ethtool: only allow set_rxnfc with rss + ring_cookie if driver opts in")
      Link: https://lore.kernel.org/netdev/871a9ecf-1e14-40dd-bbd7-e90c92f89d47@nvidia.com/
      
      
      Reviewed-by: default avatarDragos Tatulea <dtatulea@nvidia.com>
      Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
      Signed-off-by: default avatarGal Pressman <gal@nvidia.com>
      Reviewed-by: default avatarEdward Cree <ecree.xilinx@gmail.com>
      Link: https://patch.msgid.link/20241202164805.1637093-1-gal@nvidia.com
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1cf21779
    • Steffen Klassert's avatar
      xfrm: Fix acquire state insertion. · 364d7e7f
      Steffen Klassert authored
      
      commit a3567281 upstream.
      
      A recent commit jumped over the dst hash computation and
      left the symbol uninitialized. Fix this by explicitly
      computing the dst hash before it is used.
      
      Fixes: 0045e3d8 ("xfrm: Cache used outbound xfrm states at the policy.")
      Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      364d7e7f
    • Everest K.C's avatar
      xfrm: Add error handling when nla_put_u32() returns an error · 78b366aa
      Everest K.C authored
      
      commit 9d287e70 upstream.
      
      Error handling is missing when call to nla_put_u32() fails.
      Handle the error when the call to nla_put_u32() returns an error.
      
      The error was reported by Coverity Scan.
      Report:
      CID 1601525: (#1 of 1): Unused value (UNUSED_VALUE)
      returned_value: Assigning value from nla_put_u32(skb, XFRMA_SA_PCPU, x->pcpu_num)
      to err here, but that stored value is overwritten before it can be used
      
      Fixes: 1ddf9916 ("xfrm: Add support for per cpu xfrm state handling.")
      Signed-off-by: default avatarEverest K.C. <everestkc@everestkc.com.np>
      Reviewed-by: default avatarSimon Horman <horms@kernel.org>
      Reviewed-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      78b366aa
    • Geert Uytterhoeven's avatar
      dma-mapping: save base/size instead of pointer to shared DMA pool · 69894307
      Geert Uytterhoeven authored
      
      commit 22293c33 upstream.
      
      On RZ/Five, which is non-coherent, and uses CONFIG_DMA_GLOBAL_POOL=y:
      
          Oops - store (or AMO) access fault [#1]
          CPU: 0 UID: 0 PID: 1 Comm: swapper Not tainted 6.12.0-rc1-00015-g8a6e02d0c00e #201
          Hardware name: Renesas SMARC EVK based on r9a07g043f01 (DT)
          epc : __memset+0x60/0x100
           ra : __dma_alloc_from_coherent+0x150/0x17a
          epc : ffffffff8062d2bc ra : ffffffff80053a94 sp : ffffffc60000ba20
           gp : ffffffff812e9938 tp : ffffffd601920000 t0 : ffffffc6000d0000
           t1 : 0000000000000000 t2 : ffffffffe9600000 s0 : ffffffc60000baa0
           s1 : ffffffc6000d0000 a0 : ffffffc6000d0000 a1 : 0000000000000000
           a2 : 0000000000001000 a3 : ffffffc6000d1000 a4 : 0000000000000000
           a5 : 0000000000000000 a6 : ffffffd601adacc0 a7 : ffffffd601a841a8
           s2 : ffffffd6018573c0 s3 : 0000000000001000 s4 : ffffffd6019541e0
           s5 : 0000000200000022 s6 : ffffffd6018f8410 s7 : ffffffd6018573e8
           s8 : 0000000000000001 s9 : 0000000000000001 s10: 0000000000000010
           s11: 0000000000000000 t3 : 0000000000000000 t4 : ffffffffdefe62d1
           t5 : 000000001cd6a3a9 t6 : ffffffd601b2aad6
          status: 0000000200000120 badaddr: ffffffc6000d0000 cause: 0000000000000007
          [<ffffffff8062d2bc>] __memset+0x60/0x100
          [<ffffffff80053e1a>] dma_alloc_from_global_coherent+0x1c/0x28
          [<ffffffff80053056>] dma_direct_alloc+0x98/0x112
          [<ffffffff8005238c>] dma_alloc_attrs+0x78/0x86
          [<ffffffff8035fdb4>] rz_dmac_probe+0x3f6/0x50a
          [<ffffffff803a0694>] platform_probe+0x4c/0x8a
      
      If CONFIG_DMA_GLOBAL_POOL=y, the reserved_mem structure passed to
      rmem_dma_setup() is saved for later use, by saving the passed pointer.
      However, when dma_init_reserved_memory() is called later, the pointer
      has become stale, causing a crash.
      
      E.g. in the RZ/Five case, the referenced memory now contains the
      reserved_mem structure for the "mmode_resv0@30000" node (with base
      0x30000 and size 0x10000), instead of the correct "pma_resv0@58000000"
      node (with base 0x58000000 and size 0x8000000).
      
      Fix this by saving the needed reserved_mem structure's contents instead.
      
      Fixes: 8a6e02d0 ("of: reserved_mem: Restructure how the reserved memory regions are processed")
      Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
      Reviewed-by: default avatarOreoluwa Babatunde <quic_obabatun@quicinc.com>
      Tested-by: default avatarLad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      69894307
    • Zijun Hu's avatar
      of: reserved-memory: Warn for missing static reserved memory regions · 8de4e5a9
      Zijun Hu authored
      
      commit 81dfedd5 upstream.
      
      For child node of /reserved-memory, its property 'reg' may contain
      multiple regions, but fdt_scan_reserved_mem_reg_nodes() only takes
      into account the first region, and miss remaining regions.
      
      But there are no simple approach to fix it, so give user warning
      message when miss remaining regions.
      
      Fixes: 8a6e02d0 ("of: reserved_mem: Restructure how the reserved memory regions are processed")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarZijun Hu <quic_zijuhu@quicinc.com>
      Reviewed-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
      Link: https://lore.kernel.org/r/20250114-of_core_fix-v5-2-b8bafd00a86f@quicinc.com
      
      
      Signed-off-by: default avatarRob Herring (Arm) <robh@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8de4e5a9
    • Wenruo Qu's avatar
      btrfs: output the reason for open_ctree() failure · a6848636
      Wenruo Qu authored
      commit d0f03810 upstream.
      
      There is a recent ML report that mounting a large fs backed by hardware
      RAID56 controller (with one device missing) took too much time, and
      systemd seems to kill the mount attempt.
      
      In that case, the only error message is:
      
        BTRFS error (device sdj): open_ctree failed
      
      There is no reason on why the failure happened, making it very hard to
      understand the reason.
      
      At least output the error number (in the particular case it should be
      -EINTR) to provide some clue.
      
      Link: https://lore.kernel.org/linux-btrfs/9b9c4d2810abcca2f9f76e32220ed9a90febb235.camel@scientia.org/
      
      
      Reported-by: default avatarChristoph Anton Mitterer <calestyo@scientia.org>
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarFilipe Manana <fdmanana@suse.com>
      Signed-off-by: default avatarQu Wenruo <wqu@suse.com>
      Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a6848636
    • Yu Kuai's avatar
      md/md-bitmap: Synchronize bitmap_get_stats() with bitmap lifetime · 237e1951
      Yu Kuai authored
      
      commit 8d28d0dd upstream.
      
      After commit ec6bb299 ("md/md-bitmap: add 'sync_size' into struct
      md_bitmap_stats"), following panic is reported:
      
      Oops: general protection fault, probably for non-canonical address
      RIP: 0010:bitmap_get_stats+0x2b/0xa0
      Call Trace:
       <TASK>
       md_seq_show+0x2d2/0x5b0
       seq_read_iter+0x2b9/0x470
       seq_read+0x12f/0x180
       proc_reg_read+0x57/0xb0
       vfs_read+0xf6/0x380
       ksys_read+0x6c/0xf0
       do_syscall_64+0x82/0x170
       entry_SYSCALL_64_after_hwframe+0x76/0x7e
      
      Root cause is that bitmap_get_stats() can be called at anytime if mddev
      is still there, even if bitmap is destroyed, or not fully initialized.
      Deferenceing bitmap in this case can crash the kernel. Meanwhile, the
      above commit start to deferencing bitmap->storage, make the problem
      easier to trigger.
      
      Fix the problem by protecting bitmap_get_stats() with bitmap_info.mutex.
      
      Cc: stable@vger.kernel.org # v6.12+
      Fixes: 32a7627c ("[PATCH] md: optimised resync using Bitmap based intent logging")
      Reported-and-tested-by: default avatarHarshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
      Closes: https://lore.kernel.org/linux-raid/ca3a91a2-50ae-4f68-b317-abd9889f3907@oracle.com/T/#m6e5086c95201135e4941fe38f9efa76daf9666c5
      
      
      Signed-off-by: default avatarYu Kuai <yukuai3@huawei.com>
      Link: https://lore.kernel.org/r/20250124092055.4050195-1-yukuai1@huaweicloud.com
      
      
      Signed-off-by: default avatarSong Liu <song@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      237e1951
    • Shivaprasad G Bhat's avatar
      powerpc/pseries/iommu: Don't unset window if it was never set · b853ff0b
      Shivaprasad G Bhat authored
      
      commit 17391cb2 upstream.
      
      On pSeries, when user attempts to use the same vfio container used by
      different iommu group, the spapr_tce_set_window() returns -EPERM
      and the subsequent cleanup leads to the below crash.
      
         Kernel attempted to read user page (308) - exploit attempt?
         BUG: Kernel NULL pointer dereference on read at 0x00000308
         Faulting instruction address: 0xc0000000001ce358
         Oops: Kernel access of bad area, sig: 11 [#1]
         NIP:  c0000000001ce358 LR: c0000000001ce05c CTR: c00000000005add0
         <snip>
         NIP [c0000000001ce358] spapr_tce_unset_window+0x3b8/0x510
         LR [c0000000001ce05c] spapr_tce_unset_window+0xbc/0x510
         Call Trace:
           spapr_tce_unset_window+0xbc/0x510 (unreliable)
           tce_iommu_attach_group+0x24c/0x340 [vfio_iommu_spapr_tce]
           vfio_container_attach_group+0xec/0x240 [vfio]
           vfio_group_fops_unl_ioctl+0x548/0xb00 [vfio]
           sys_ioctl+0x754/0x1580
           system_call_exception+0x13c/0x330
           system_call_vectored_common+0x15c/0x2ec
         <snip>
         --- interrupt: 3000
      
      Fix this by having null check for the tbl passed to the
      spapr_tce_unset_window().
      
      Fixes: f431a8cd ("powerpc/iommu: Reimplement the iommu_table_group_ops for pSeries")
      Cc: stable@vger.kernel.org
      Reported-by: default avatarVaishnavi Bhat <vaish123@in.ibm.com>
      Signed-off-by: default avatarShivaprasad G Bhat <sbhat@linux.ibm.com>
      Signed-off-by: default avatarMadhavan Srinivasan <maddy@linux.ibm.com>
      Link: https://patch.msgid.link/173674009556.1559.12487885286848752833.stgit@linux.ibm.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b853ff0b
    • Dan Carpenter's avatar
      media: imx-jpeg: Fix potential error pointer dereference in detach_pm() · 6e601a64
      Dan Carpenter authored
      
      commit 1378ffec upstream.
      
      The proble is on the first line:
      
      	if (jpeg->pd_dev[i] && !pm_runtime_suspended(jpeg->pd_dev[i]))
      
      If jpeg->pd_dev[i] is an error pointer, then passing it to
      pm_runtime_suspended() will lead to an Oops.  The other conditions
      check for both error pointers and NULL, but it would be more clear to
      use the IS_ERR_OR_NULL() check for that.
      
      Fixes: fd0af4cd ("media: imx-jpeg: Ensure power suppliers be suspended before detach them")
      Cc: <stable@vger.kernel.org>
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Reviewed-by: default avatarMing Qian <ming.qian@nxp.com>
      Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6e601a64
    • Laurentiu Palcu's avatar
      staging: media: max96712: fix kernel oops when removing module · 278a98f6
      Laurentiu Palcu authored
      
      commit ee1b5046 upstream.
      
      The following kernel oops is thrown when trying to remove the max96712
      module:
      
      Unable to handle kernel paging request at virtual address 00007375746174db
      Mem abort info:
        ESR = 0x0000000096000004
        EC = 0x25: DABT (current EL), IL = 32 bits
        SET = 0, FnV = 0
        EA = 0, S1PTW = 0
        FSC = 0x04: level 0 translation fault
      Data abort info:
        ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
        CM = 0, WnR = 0, TnD = 0, TagAccess = 0
        GCS = 0, Overlay = 0, DirtyBit = 0, Xs = 0
      user pgtable: 4k pages, 48-bit VAs, pgdp=000000010af89000
      [00007375746174db] pgd=0000000000000000, p4d=0000000000000000
      Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP
      Modules linked in: crct10dif_ce polyval_ce mxc_jpeg_encdec flexcan
          snd_soc_fsl_sai snd_soc_fsl_asoc_card snd_soc_fsl_micfil dwc_mipi_csi2
          imx_csi_formatter polyval_generic v4l2_jpeg imx_pcm_dma can_dev
          snd_soc_imx_audmux snd_soc_wm8962 snd_soc_imx_card snd_soc_fsl_utils
          max96712(C-) rpmsg_ctrl rpmsg_char pwm_fan fuse
          [last unloaded: imx8_isi]
      CPU: 0 UID: 0 PID: 754 Comm: rmmod
      	    Tainted: G         C    6.12.0-rc6-06364-g327fec852c31 #17
      Tainted: [C]=CRAP
      Hardware name: NXP i.MX95 19X19 board (DT)
      pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : led_put+0x1c/0x40
      lr : v4l2_subdev_put_privacy_led+0x48/0x58
      sp : ffff80008699bbb0
      x29: ffff80008699bbb0 x28: ffff00008ac233c0 x27: 0000000000000000
      x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000
      x23: ffff000080cf1170 x22: ffff00008b53bd00 x21: ffff8000822ad1c8
      x20: ffff000080ff5c00 x19: ffff00008b53be40 x18: 0000000000000000
      x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
      x14: 0000000000000004 x13: ffff0000800f8010 x12: 0000000000000000
      x11: ffff000082acf5c0 x10: ffff000082acf478 x9 : ffff0000800f8010
      x8 : 0101010101010101 x7 : 7f7f7f7f7f7f7f7f x6 : fefefeff6364626d
      x5 : 8080808000000000 x4 : 0000000000000020 x3 : 00000000553a3dc1
      x2 : ffff00008ac233c0 x1 : ffff00008ac233c0 x0 : ff00737574617473
      Call trace:
       led_put+0x1c/0x40
       v4l2_subdev_put_privacy_led+0x48/0x58
       v4l2_async_unregister_subdev+0x2c/0x1a4
       max96712_remove+0x1c/0x38 [max96712]
       i2c_device_remove+0x2c/0x9c
       device_remove+0x4c/0x80
       device_release_driver_internal+0x1cc/0x228
       driver_detach+0x4c/0x98
       bus_remove_driver+0x6c/0xbc
       driver_unregister+0x30/0x60
       i2c_del_driver+0x54/0x64
       max96712_i2c_driver_exit+0x18/0x1d0 [max96712]
       __arm64_sys_delete_module+0x1a4/0x290
       invoke_syscall+0x48/0x10c
       el0_svc_common.constprop.0+0xc0/0xe0
       do_el0_svc+0x1c/0x28
       el0_svc+0x34/0xd8
       el0t_64_sync_handler+0x120/0x12c
       el0t_64_sync+0x190/0x194
      Code: f9000bf3 aa0003f3 f9402800 f9402000 (f9403400)
      ---[ end trace 0000000000000000 ]---
      
      This happens because in v4l2_i2c_subdev_init(), the i2c_set_cliendata()
      is called again and the data is overwritten to point to sd, instead of
      priv. So, in remove(), the wrong pointer is passed to
      v4l2_async_unregister_subdev(), leading to a crash.
      
      Fixes: 5814f32f ("media: staging: max96712: Add basic support for MAX96712 GMSL2 deserializer")
      Signed-off-by: default avatarLaurentiu Palcu <laurentiu.palcu@oss.nxp.com>
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarNiklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
      Reviewed-by: default avatarRicardo Ribalda <ribalda@chromium.org>
      Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      278a98f6
    • Thinh Nguyen's avatar
      usb: gadget: f_tcm: Don't free command immediately · 929b6981
      Thinh Nguyen authored
      
      commit c225d006 upstream.
      
      Don't prematurely free the command. Wait for the status completion of
      the sense status. It can be freed then. Otherwise we will double-free
      the command.
      
      Fixes: cff834c1 ("usb-gadget/tcm: Convert to TARGET_SCF_ACK_KREF I/O krefs")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarThinh Nguyen <Thinh.Nguyen@synopsys.com>
      Link: https://lore.kernel.org/r/ae919ac431f16275e05ec819bdffb3ac5f44cbe1.1733876548.git.Thinh.Nguyen@synopsys.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      929b6981
    • Calvin Owens's avatar
      pps: Fix a use-after-free · 7e5ee328
      Calvin Owens authored
      
      commit c79a39dc upstream.
      
      On a board running ntpd and gpsd, I'm seeing a consistent use-after-free
      in sys_exit() from gpsd when rebooting:
      
          pps pps1: removed
          ------------[ cut here ]------------
          kobject: '(null)' (00000000db4bec24): is not initialized, yet kobject_put() is being called.
          WARNING: CPU: 2 PID: 440 at lib/kobject.c:734 kobject_put+0x120/0x150
          CPU: 2 UID: 299 PID: 440 Comm: gpsd Not tainted 6.11.0-rc6-00308-gb31c44928842 #1
          Hardware name: Raspberry Pi 4 Model B Rev 1.1 (DT)
          pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
          pc : kobject_put+0x120/0x150
          lr : kobject_put+0x120/0x150
          sp : ffffffc0803d3ae0
          x29: ffffffc0803d3ae0 x28: ffffff8042dc9738 x27: 0000000000000001
          x26: 0000000000000000 x25: ffffff8042dc9040 x24: ffffff8042dc9440
          x23: ffffff80402a4620 x22: ffffff8042ef4bd0 x21: ffffff80405cb600
          x20: 000000000008001b x19: ffffff8040b3b6e0 x18: 0000000000000000
          x17: 0000000000000000 x16: 0000000000000000 x15: 696e6920746f6e20
          x14: 7369203a29343263 x13: 205d303434542020 x12: 0000000000000000
          x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000
          x8 : 0000000000000000 x7 : 0000000000000000 x6 : 0000000000000000
          x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000
          x2 : 0000000000000000 x1 : 0000000000000000 x0 : 0000000000000000
          Call trace:
           kobject_put+0x120/0x150
           cdev_put+0x20/0x3c
           __fput+0x2c4/0x2d8
           ____fput+0x1c/0x38
           task_work_run+0x70/0xfc
           do_exit+0x2a0/0x924
           do_group_exit+0x34/0x90
           get_signal+0x7fc/0x8c0
           do_signal+0x128/0x13b4
           do_notify_resume+0xdc/0x160
           el0_svc+0xd4/0xf8
           el0t_64_sync_handler+0x140/0x14c
           el0t_64_sync+0x190/0x194
          ---[ end trace 0000000000000000 ]---
      
      ...followed by more symptoms of corruption, with similar stacks:
      
          refcount_t: underflow; use-after-free.
          kernel BUG at lib/list_debug.c:62!
          Kernel panic - not syncing: Oops - BUG: Fatal exception
      
      This happens because pps_device_destruct() frees the pps_device with the
      embedded cdev immediately after calling cdev_del(), but, as the comment
      above cdev_del() notes, fops for previously opened cdevs are still
      callable even after cdev_del() returns. I think this bug has always
      been there: I can't explain why it suddenly started happening every time
      I reboot this particular board.
      
      In commit d953e0e8 ("pps: Fix a use-after free bug when
      unregistering a source."), George Spelvin suggested removing the
      embedded cdev. That seems like the simplest way to fix this, so I've
      implemented his suggestion, using __register_chrdev() with pps_idr
      becoming the source of truth for which minor corresponds to which
      device.
      
      But now that pps_idr defines userspace visibility instead of cdev_add(),
      we need to be sure the pps->dev refcount can't reach zero while
      userspace can still find it again. So, the idr_remove() call moves to
      pps_unregister_cdev(), and pps_idr now holds a reference to pps->dev.
      
          pps_core: source serial1 got cdev (251:1)
          <...>
          pps pps1: removed
          pps_core: unregistering pps1
          pps_core: deallocating pps1
      
      Fixes: d953e0e8 ("pps: Fix a use-after free bug when unregistering a source.")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarCalvin Owens <calvin@wbinvd.org>
      Reviewed-by: default avatarMichal Schmidt <mschmidt@redhat.com>
      Link: https://lore.kernel.org/r/a17975fd5ae99385791929e563f72564edbcf28f.1731383727.git.calvin@wbinvd.org
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7e5ee328
    • Laurent Pinchart's avatar
      media: uvcvideo: Fix double free in error path · d1f8e69e
      Laurent Pinchart authored
      commit c6ef3a7f upstream.
      
      If the uvc_status_init() function fails to allocate the int_urb, it will
      free the dev->status pointer but doesn't reset the pointer to NULL. This
      results in the kfree() call in uvc_status_cleanup() trying to
      double-free the memory. Fix it by resetting the dev->status pointer to
      NULL after freeing it.
      
      Fixes: a31a4055 ("V4L/DVB:usbvideo:don't use part of buffer for USB transfer #4")
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20241107235130.31372-1-laurent.pinchart@ideasonboard.com
      
      
      Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
      Reviewed by: Ricardo Ribalda <ribalda@chromium.org>
      Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d1f8e69e
    • Arnaud Pouliquen's avatar
      remoteproc: core: Fix ida_free call while not allocated · f2013d19
      Arnaud Pouliquen authored
      
      commit 7378aeb6 upstream.
      
      In the rproc_alloc() function, on error, put_device(&rproc->dev) is
      called, leading to the call of the rproc_type_release() function.
      An error can occurs before ida_alloc is called.
      
      In such case in rproc_type_release(), the condition (rproc->index >= 0) is
      true as rproc->index has been  initialized to 0.
      ida_free() is called reporting a warning:
      [    4.181906] WARNING: CPU: 1 PID: 24 at lib/idr.c:525 ida_free+0x100/0x164
      [    4.186378] stm32-display-dsi 5a000000.dsi: Fixed dependency cycle(s) with /soc/dsi@5a000000/panel@0
      [    4.188854] ida_free called for id=0 which is not allocated.
      [    4.198256] mipi-dsi 5a000000.dsi.0: Fixed dependency cycle(s) with /soc/dsi@5a000000
      [    4.203556] Modules linked in: panel_orisetech_otm8009a dw_mipi_dsi_stm(+) gpu_sched dw_mipi_dsi stm32_rproc stm32_crc32 stm32_ipcc(+) optee(+)
      [    4.224307] CPU: 1 UID: 0 PID: 24 Comm: kworker/u10:0 Not tainted 6.12.0 #442
      [    4.231481] Hardware name: STM32 (Device Tree Support)
      [    4.236627] Workqueue: events_unbound deferred_probe_work_func
      [    4.242504] Call trace:
      [    4.242522]  unwind_backtrace from show_stack+0x10/0x14
      [    4.250218]  show_stack from dump_stack_lvl+0x50/0x64
      [    4.255274]  dump_stack_lvl from __warn+0x80/0x12c
      [    4.260134]  __warn from warn_slowpath_fmt+0x114/0x188
      [    4.265199]  warn_slowpath_fmt from ida_free+0x100/0x164
      [    4.270565]  ida_free from rproc_type_release+0x38/0x60
      [    4.275832]  rproc_type_release from device_release+0x30/0xa0
      [    4.281601]  device_release from kobject_put+0xc4/0x294
      [    4.286762]  kobject_put from rproc_alloc.part.0+0x208/0x28c
      [    4.292430]  rproc_alloc.part.0 from devm_rproc_alloc+0x80/0xc4
      [    4.298393]  devm_rproc_alloc from stm32_rproc_probe+0xd0/0x844 [stm32_rproc]
      [    4.305575]  stm32_rproc_probe [stm32_rproc] from platform_probe+0x5c/0xbc
      
      Calling ida_alloc earlier in rproc_alloc ensures that the rproc->index is
      properly set.
      
      Fixes: 08333b91 ("remoteproc: Directly use ida_alloc()/free()")
      Signed-off-by: default avatarArnaud Pouliquen <arnaud.pouliquen@foss.st.com>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20241122175127.2188037-1-arnaud.pouliquen@foss.st.com
      
      
      Signed-off-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f2013d19
    • Patrisious Haddad's avatar
      RDMA/mlx5: Fix implicit ODP use after free · 7cc8f681
      Patrisious Haddad authored
      commit d3d93041 upstream.
      
      Prevent double queueing of implicit ODP mr destroy work by using
      __xa_cmpxchg() to make sure this is the only time we are destroying this
      specific mr.
      
      Without this change, we could try to invalidate this mr twice, which in
      turn could result in queuing a MR work destroy twice, and eventually the
      second work could execute after the MR was freed due to the first work,
      causing a user after free and trace below.
      
         refcount_t: underflow; use-after-free.
         WARNING: CPU: 2 PID: 12178 at lib/refcount.c:28 refcount_warn_saturate+0x12b/0x130
         Modules linked in: bonding ib_ipoib vfio_pci ip_gre geneve nf_tables ip6_gre gre ip6_tunnel tunnel6 ipip tunnel4 ib_umad rdma_ucm mlx5_vfio_pci vfio_pci_core vfio_iommu_type1 mlx5_ib vfio ib_uverbs mlx5_core iptable_raw openvswitch nsh rpcrdma ib_iser libiscsi scsi_transport_iscsi rdma_cm iw_cm ib_cm ib_core xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink xt_addrtype iptable_nat nf_nat br_netfilter rpcsec_gss_krb5 auth_rpcgss oid_registry overlay zram zsmalloc fuse [last unloaded: ib_uverbs]
         CPU: 2 PID: 12178 Comm: kworker/u20:5 Not tainted 6.5.0-rc1_net_next_mlx5_58c644e #1
         Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
         Workqueue: events_unbound free_implicit_child_mr_work [mlx5_ib]
         RIP: 0010:refcount_warn_saturate+0x12b/0x130
         Code: 48 c7 c7 38 95 2a 82 c6 05 bc c6 fe 00 01 e8 0c 66 aa ff 0f 0b 5b c3 48 c7 c7 e0 94 2a 82 c6 05 a7 c6 fe 00 01 e8 f5 65 aa ff <0f> 0b 5b c3 90 8b 07 3d 00 00 00 c0 74 12 83 f8 01 74 13 8d 50 ff
         RSP: 0018:ffff8881008e3e40 EFLAGS: 00010286
         RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000027
         RDX: ffff88852c91b5c8 RSI: 0000000000000001 RDI: ffff88852c91b5c0
         RBP: ffff8881dacd4e00 R08: 00000000ffffffff R09: 0000000000000019
         R10: 000000000000072e R11: 0000000063666572 R12: ffff88812bfd9e00
         R13: ffff8881c792d200 R14: ffff88810011c005 R15: ffff8881002099c0
         FS:  0000000000000000(0000) GS:ffff88852c900000(0000) knlGS:0000000000000000
         CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
         CR2: 00007f5694b5e000 CR3: 00000001153f6003 CR4: 0000000000370ea0
         DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
         DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
         Call Trace:
          <TASK>
          ? refcount_warn_saturate+0x12b/0x130
          free_implicit_child_mr_work+0x180/0x1b0 [mlx5_ib]
          process_one_work+0x1cc/0x3c0
          worker_thread+0x218/0x3c0
          kthread+0xc6/0xf0
          ret_from_fork+0x1f/0x30
          </TASK>
      
      Fixes: 5256edcb ("RDMA/mlx5: Rework implicit ODP destroy")
      Cc: stable@vger.kernel.org
      Link: https://patch.msgid.link/r/c96b8645a81085abff739e6b06e286a350d1283d.1737274283.git.leon@kernel.org
      
      
      Signed-off-by: default avatarPatrisious Haddad <phaddad@nvidia.com>
      Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
      Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      7cc8f681
    • Matthieu Baerts (NGI0)'s avatar
      mptcp: blackhole only if 1st SYN retrans w/o MPC is accepted · b2bf3a2f
      Matthieu Baerts (NGI0) authored
      
      commit e598d898 upstream.
      
      The Fixes commit mentioned this:
      
      > An MPTCP firewall blackhole can be detected if the following SYN
      > retransmission after a fallback to "plain" TCP is accepted.
      
      But in fact, this blackhole was detected if any following SYN
      retransmissions after a fallback to TCP was accepted.
      
      That's because 'mptcp_subflow_early_fallback()' will set 'request_mptcp'
      to 0, and 'mpc_drop' will never be reset to 0 after.
      
      This is an issue, because some not so unusual situations might cause the
      kernel to detect a false-positive blackhole, e.g. a client trying to
      connect to a server while the network is not ready yet, causing a few
      SYN retransmissions, before reaching the end server.
      
      Fixes: 27069e7c ("mptcp: disable active MPTCP in case of blackhole")
      Cc: stable@vger.kernel.org
      Reviewed-by: default avatarMat Martineau <martineau@kernel.org>
      Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b2bf3a2f
    • Paolo Abeni's avatar
      mptcp: handle fastopen disconnect correctly · 84ac44d9
      Paolo Abeni authored
      
      commit 619af16b upstream.
      
      Syzbot was able to trigger a data stream corruption:
      
        WARNING: CPU: 0 PID: 9846 at net/mptcp/protocol.c:1024 __mptcp_clean_una+0xddb/0xff0 net/mptcp/protocol.c:1024
        Modules linked in:
        CPU: 0 UID: 0 PID: 9846 Comm: syz-executor351 Not tainted 6.13.0-rc2-syzkaller-00059-g00a5acdbf398 #0
        Hardware name: Google Compute Engine/Google Compute Engine, BIOS Google 11/25/2024
        RIP: 0010:__mptcp_clean_una+0xddb/0xff0 net/mptcp/protocol.c:1024
        Code: fa ff ff 48 8b 4c 24 18 80 e1 07 fe c1 38 c1 0f 8c 8e fa ff ff 48 8b 7c 24 18 e8 e0 db 54 f6 e9 7f fa ff ff e8 e6 80 ee f5 90 <0f> 0b 90 4c 8b 6c 24 40 4d 89 f4 e9 04 f5 ff ff 44 89 f1 80 e1 07
        RSP: 0018:ffffc9000c0cf400 EFLAGS: 00010293
        RAX: ffffffff8bb0dd5a RBX: ffff888033f5d230 RCX: ffff888059ce8000
        RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
        RBP: ffffc9000c0cf518 R08: ffffffff8bb0d1dd R09: 1ffff110170c8928
        R10: dffffc0000000000 R11: ffffed10170c8929 R12: 0000000000000000
        R13: ffff888033f5d220 R14: dffffc0000000000 R15: ffff8880592b8000
        FS:  00007f6e866496c0(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 00007f6e86f491a0 CR3: 00000000310e6000 CR4: 00000000003526f0
        DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
        DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
        Call Trace:
         <TASK>
         __mptcp_clean_una_wakeup+0x7f/0x2d0 net/mptcp/protocol.c:1074
         mptcp_release_cb+0x7cb/0xb30 net/mptcp/protocol.c:3493
         release_sock+0x1aa/0x1f0 net/core/sock.c:3640
         inet_wait_for_connect net/ipv4/af_inet.c:609 [inline]
         __inet_stream_connect+0x8bd/0xf30 net/ipv4/af_inet.c:703
         mptcp_sendmsg_fastopen+0x2a2/0x530 net/mptcp/protocol.c:1755
         mptcp_sendmsg+0x1884/0x1b10 net/mptcp/protocol.c:1830
         sock_sendmsg_nosec net/socket.c:711 [inline]
         __sock_sendmsg+0x1a6/0x270 net/socket.c:726
         ____sys_sendmsg+0x52a/0x7e0 net/socket.c:2583
         ___sys_sendmsg net/socket.c:2637 [inline]
         __sys_sendmsg+0x269/0x350 net/socket.c:2669
         do_syscall_x64 arch/x86/entry/common.c:52 [inline]
         do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
         entry_SYSCALL_64_after_hwframe+0x77/0x7f
        RIP: 0033:0x7f6e86ebfe69
        Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 b1 1f 00 00 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 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
        RSP: 002b:00007f6e86649168 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
        RAX: ffffffffffffffda RBX: 00007f6e86f491b8 RCX: 00007f6e86ebfe69
        RDX: 0000000030004001 RSI: 0000000020000080 RDI: 0000000000000003
        RBP: 00007f6e86f491b0 R08: 00007f6e866496c0 R09: 0000000000000000
        R10: 0000000000000000 R11: 0000000000000246 R12: 00007f6e86f491bc
        R13: 000000000000006e R14: 00007ffe445d9420 R15: 00007ffe445d9508
         </TASK>
      
      The root cause is the bad handling of disconnect() generated internally
      by the MPTCP protocol in case of connect FASTOPEN errors.
      
      Address the issue increasing the socket disconnect counter even on such
      a case, to allow other threads waiting on the same socket lock to
      properly error out.
      
      Fixes: c2b2ae39 ("mptcp: handle correctly disconnect() failures")
      Cc: stable@vger.kernel.org
      Reported-by: default avatar <syzbot+ebc0b8ae5d3590b2c074@syzkaller.appspotmail.com>
      Closes: https://lore.kernel.org/67605870.050a0220.37aaf.0137.GAE@google.com
      Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/537
      
      
      Tested-by: default avatar <syzbot+ebc0b8ae5d3590b2c074@syzkaller.appspotmail.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://patch.msgid.link/20250123-net-mptcp-syzbot-issues-v1-3-af73258a726f@kernel.org
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      84ac44d9
    • Matthieu Baerts (NGI0)'s avatar
      mptcp: pm: only set fullmesh for subflow endp · 8ac344cb
      Matthieu Baerts (NGI0) authored
      
      commit 1bb0d134 upstream.
      
      With the in-kernel path-manager, it is possible to change the 'fullmesh'
      flag. The code in mptcp_pm_nl_fullmesh() expects to change it only on
      'subflow' endpoints, to recreate more or less subflows using the linked
      address.
      
      Unfortunately, the set_flags() hook was a bit more permissive, and
      allowed 'implicit' endpoints to get the 'fullmesh' flag while it is not
      allowed before.
      
      That's what syzbot found, triggering the following warning:
      
        WARNING: CPU: 0 PID: 6499 at net/mptcp/pm_netlink.c:1496 __mark_subflow_endp_available net/mptcp/pm_netlink.c:1496 [inline]
        WARNING: CPU: 0 PID: 6499 at net/mptcp/pm_netlink.c:1496 mptcp_pm_nl_fullmesh net/mptcp/pm_netlink.c:1980 [inline]
        WARNING: CPU: 0 PID: 6499 at net/mptcp/pm_netlink.c:1496 mptcp_nl_set_flags net/mptcp/pm_netlink.c:2003 [inline]
        WARNING: CPU: 0 PID: 6499 at net/mptcp/pm_netlink.c:1496 mptcp_pm_nl_set_flags+0x974/0xdc0 net/mptcp/pm_netlink.c:2064
        Modules linked in:
        CPU: 0 UID: 0 PID: 6499 Comm: syz.1.413 Not tainted 6.13.0-rc5-syzkaller-00172-gd1bf27c4e176 #0
        Hardware name: Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024
        RIP: 0010:__mark_subflow_endp_available net/mptcp/pm_netlink.c:1496 [inline]
        RIP: 0010:mptcp_pm_nl_fullmesh net/mptcp/pm_netlink.c:1980 [inline]
        RIP: 0010:mptcp_nl_set_flags net/mptcp/pm_netlink.c:2003 [inline]
        RIP: 0010:mptcp_pm_nl_set_flags+0x974/0xdc0 net/mptcp/pm_netlink.c:2064
        Code: 01 00 00 49 89 c5 e8 fb 45 e8 f5 e9 b8 fc ff ff e8 f1 45 e8 f5 4c 89 f7 be 03 00 00 00 e8 44 1d 0b f9 eb a0 e8 dd 45 e8 f5 90 <0f> 0b 90 e9 17 ff ff ff 89 d9 80 e1 07 38 c1 0f 8c c9 fc ff ff 48
        RSP: 0018:ffffc9000d307240 EFLAGS: 00010293
        RAX: ffffffff8bb72e03 RBX: 0000000000000000 RCX: ffff88807da88000
        RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
        RBP: ffffc9000d307430 R08: ffffffff8bb72cf0 R09: 1ffff1100b842a5e
        R10: dffffc0000000000 R11: ffffed100b842a5f R12: ffff88801e2e5ac0
        R13: ffff88805c214800 R14: ffff88805c2152e8 R15: 1ffff1100b842a5d
        FS:  00005555619f6500(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 0000000020002840 CR3: 00000000247e6000 CR4: 00000000003526f0
        DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
        DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
        Call Trace:
         <TASK>
         genl_family_rcv_msg_doit net/netlink/genetlink.c:1115 [inline]
         genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
         genl_rcv_msg+0xb14/0xec0 net/netlink/genetlink.c:1210
         netlink_rcv_skb+0x1e3/0x430 net/netlink/af_netlink.c:2542
         genl_rcv+0x28/0x40 net/netlink/genetlink.c:1219
         netlink_unicast_kernel net/netlink/af_netlink.c:1321 [inline]
         netlink_unicast+0x7f6/0x990 net/netlink/af_netlink.c:1347
         netlink_sendmsg+0x8e4/0xcb0 net/netlink/af_netlink.c:1891
         sock_sendmsg_nosec net/socket.c:711 [inline]
         __sock_sendmsg+0x221/0x270 net/socket.c:726
         ____sys_sendmsg+0x52a/0x7e0 net/socket.c:2583
         ___sys_sendmsg net/socket.c:2637 [inline]
         __sys_sendmsg+0x269/0x350 net/socket.c:2669
         do_syscall_x64 arch/x86/entry/common.c:52 [inline]
         do_syscall_64+0xf3/0x230 arch/x86/entry/common.c:83
         entry_SYSCALL_64_after_hwframe+0x77/0x7f
        RIP: 0033:0x7f5fe8785d29
        Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 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 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
        RSP: 002b:00007fff571f5558 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
        RAX: ffffffffffffffda RBX: 00007f5fe8975fa0 RCX: 00007f5fe8785d29
        RDX: 0000000000000000 RSI: 0000000020000480 RDI: 0000000000000007
        RBP: 00007f5fe8801b08 R08: 0000000000000000 R09: 0000000000000000
        R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
        R13: 00007f5fe8975fa0 R14: 00007f5fe8975fa0 R15: 00000000000011f4
         </TASK>
      
      Here, syzbot managed to set the 'fullmesh' flag on an 'implicit' and
      used -- according to 'id_avail_bitmap' -- endpoint, causing the PM to
      try decrement the local_addr_used counter which is only incremented for
      the 'subflow' endpoint.
      
      Note that 'no type' endpoints -- not 'subflow', 'signal', 'implicit' --
      are fine, because their ID will not be marked as used in the 'id_avail'
      bitmap, and setting 'fullmesh' can help forcing the creation of subflow
      when receiving an ADD_ADDR.
      
      Fixes: 73c762c1 ("mptcp: set fullmesh flag in pm_netlink")
      Cc: stable@vger.kernel.org
      Reported-by: default avatar <syzbot+cd16e79c1e45f3fe0377@syzkaller.appspotmail.com>
      Closes: https://lore.kernel.org/6786ac51.050a0220.216c54.00a6.GAE@google.com
      Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/540
      
      
      Reviewed-by: default avatarMat Martineau <martineau@kernel.org>
      Signed-off-by: default avatarMatthieu Baerts (NGI0) <matttbe@kernel.org>
      Link: https://patch.msgid.link/20250123-net-mptcp-syzbot-issues-v1-2-af73258a726f@kernel.org
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8ac344cb
    • Paolo Abeni's avatar
      mptcp: consolidate suboption status · 6169e942
      Paolo Abeni authored
      
      commit c86b0007 upstream.
      
      MPTCP maintains the received sub-options status is the bitmask carrying
      the received suboptions and in several bitfields carrying per suboption
      additional info.
      
      Zeroing the bitmask before parsing is not enough to ensure a consistent
      status, and the MPTCP code has to additionally clear some bitfiled
      depending on the actually parsed suboption.
      
      The above schema is fragile, and syzbot managed to trigger a path where
      a relevant bitfield is not cleared/initialized:
      
        BUG: KMSAN: uninit-value in __mptcp_expand_seq net/mptcp/options.c:1030 [inline]
        BUG: KMSAN: uninit-value in mptcp_expand_seq net/mptcp/protocol.h:864 [inline]
        BUG: KMSAN: uninit-value in ack_update_msk net/mptcp/options.c:1060 [inline]
        BUG: KMSAN: uninit-value in mptcp_incoming_options+0x2036/0x3d30 net/mptcp/options.c:1209
         __mptcp_expand_seq net/mptcp/options.c:1030 [inline]
         mptcp_expand_seq net/mptcp/protocol.h:864 [inline]
         ack_update_msk net/mptcp/options.c:1060 [inline]
         mptcp_incoming_options+0x2036/0x3d30 net/mptcp/options.c:1209
         tcp_data_queue+0xb4/0x7be0 net/ipv4/tcp_input.c:5233
         tcp_rcv_established+0x1061/0x2510 net/ipv4/tcp_input.c:6264
         tcp_v4_do_rcv+0x7f3/0x11a0 net/ipv4/tcp_ipv4.c:1916
         tcp_v4_rcv+0x51df/0x5750 net/ipv4/tcp_ipv4.c:2351
         ip_protocol_deliver_rcu+0x2a3/0x13d0 net/ipv4/ip_input.c:205
         ip_local_deliver_finish+0x336/0x500 net/ipv4/ip_input.c:233
         NF_HOOK include/linux/netfilter.h:314 [inline]
         ip_local_deliver+0x21f/0x490 net/ipv4/ip_input.c:254
         dst_input include/net/dst.h:460 [inline]
         ip_rcv_finish+0x4a2/0x520 net/ipv4/ip_input.c:447
         NF_HOOK include/linux/netfilter.h:314 [inline]
         ip_rcv+0xcd/0x380 net/ipv4/ip_input.c:567
         __netif_receive_skb_one_core net/core/dev.c:5704 [inline]
         __netif_receive_skb+0x319/0xa00 net/core/dev.c:5817
         process_backlog+0x4ad/0xa50 net/core/dev.c:6149
         __napi_poll+0xe7/0x980 net/core/dev.c:6902
         napi_poll net/core/dev.c:6971 [inline]
         net_rx_action+0xa5a/0x19b0 net/core/dev.c:7093
         handle_softirqs+0x1a0/0x7c0 kernel/softirq.c:561
         __do_softirq+0x14/0x1a kernel/softirq.c:595
         do_softirq+0x9a/0x100 kernel/softirq.c:462
         __local_bh_enable_ip+0x9f/0xb0 kernel/softirq.c:389
         local_bh_enable include/linux/bottom_half.h:33 [inline]
         rcu_read_unlock_bh include/linux/rcupdate.h:919 [inline]
         __dev_queue_xmit+0x2758/0x57d0 net/core/dev.c:4493
         dev_queue_xmit include/linux/netdevice.h:3168 [inline]
         neigh_hh_output include/net/neighbour.h:523 [inline]
         neigh_output include/net/neighbour.h:537 [inline]
         ip_finish_output2+0x187c/0x1b70 net/ipv4/ip_output.c:236
         __ip_finish_output+0x287/0x810
         ip_finish_output+0x4b/0x600 net/ipv4/ip_output.c:324
         NF_HOOK_COND include/linux/netfilter.h:303 [inline]
         ip_output+0x15f/0x3f0 net/ipv4/ip_output.c:434
         dst_output include/net/dst.h:450 [inline]
         ip_local_out net/ipv4/ip_output.c:130 [inline]
         __ip_queue_xmit+0x1f2a/0x20d0 net/ipv4/ip_output.c:536
         ip_queue_xmit+0x60/0x80 net/ipv4/ip_output.c:550
         __tcp_transmit_skb+0x3cea/0x4900 net/ipv4/tcp_output.c:1468
         tcp_transmit_skb net/ipv4/tcp_output.c:1486 [inline]
         tcp_write_xmit+0x3b90/0x9070 net/ipv4/tcp_output.c:2829
         __tcp_push_pending_frames+0xc4/0x380 net/ipv4/tcp_output.c:3012
         tcp_send_fin+0x9f6/0xf50 net/ipv4/tcp_output.c:3618
         __tcp_close+0x140c/0x1550 net/ipv4/tcp.c:3130
         __mptcp_close_ssk+0x74e/0x16f0 net/mptcp/protocol.c:2496
         mptcp_close_ssk+0x26b/0x2c0 net/mptcp/protocol.c:2550
         mptcp_pm_nl_rm_addr_or_subflow+0x635/0xd10 net/mptcp/pm_netlink.c:889
         mptcp_pm_nl_rm_subflow_received net/mptcp/pm_netlink.c:924 [inline]
         mptcp_pm_flush_addrs_and_subflows net/mptcp/pm_netlink.c:1688 [inline]
         mptcp_nl_flush_addrs_list net/mptcp/pm_netlink.c:1709 [inline]
         mptcp_pm_nl_flush_addrs_doit+0xe10/0x1630 net/mptcp/pm_netlink.c:1750
         genl_family_rcv_msg_doit net/netlink/genetlink.c:1115 [inline]
         genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
         genl_rcv_msg+0x1214/0x12c0 net/netlink/genetlink.c:1210
         netlink_rcv_skb+0x375/0x650 net/netlink/af_netlink.c:2542
         genl_rcv+0x40/0x60 net/netlink/genetlink.c:1219
         netlink_unicast_kernel net/netlink/af_netlink.c:1321 [inline]
         netlink_unicast+0xf52/0x1260 net/netlink/af_netlink.c:1347
         netlink_sendmsg+0x10da/0x11e0 net/netlink/af_netlink.c:1891
         sock_sendmsg_nosec net/socket.c:711 [inline]
         __sock_sendmsg+0x30f/0x380 net/socket.c:726
         ____sys_sendmsg+0x877/0xb60 net/socket.c:2583
         ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2637
         __sys_sendmsg net/socket.c:2669 [inline]
         __do_sys_sendmsg net/socket.c:2674 [inline]
         __se_sys_sendmsg net/socket.c:2672 [inline]
         __x64_sys_sendmsg+0x212/0x3c0 net/socket.c:2672
         x64_sys_call+0x2ed6/0x3c30 arch/x86/include/generated/asm/syscalls_64.h:47
         do_syscall_x64 arch/x86/entry/common.c:52 [inline]
         do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
         entry_SYSCALL_64_after_hwframe+0x77/0x7f
      
        Uninit was stored to memory at:
         mptcp_get_options+0x2c0f/0x2f20 net/mptcp/options.c:397
         mptcp_incoming_options+0x19a/0x3d30 net/mptcp/options.c:1150
         tcp_data_queue+0xb4/0x7be0 net/ipv4/tcp_input.c:5233
         tcp_rcv_established+0x1061/0x2510 net/ipv4/tcp_input.c:6264
         tcp_v4_do_rcv+0x7f3/0x11a0 net/ipv4/tcp_ipv4.c:1916
         tcp_v4_rcv+0x51df/0x5750 net/ipv4/tcp_ipv4.c:2351
         ip_protocol_deliver_rcu+0x2a3/0x13d0 net/ipv4/ip_input.c:205
         ip_local_deliver_finish+0x336/0x500 net/ipv4/ip_input.c:233
         NF_HOOK include/linux/netfilter.h:314 [inline]
         ip_local_deliver+0x21f/0x490 net/ipv4/ip_input.c:254
         dst_input include/net/dst.h:460 [inline]
         ip_rcv_finish+0x4a2/0x520 net/ipv4/ip_input.c:447
         NF_HOOK include/linux/netfilter.h:314 [inline]
         ip_rcv+0xcd/0x380 net/ipv4/ip_input.c:567
         __netif_receive_skb_one_core net/core/dev.c:5704 [inline]
         __netif_receive_skb+0x319/0xa00 net/core/dev.c:5817
         process_backlog+0x4ad/0xa50 net/core/dev.c:6149
         __napi_poll+0xe7/0x980 net/core/dev.c:6902
         napi_poll net/core/dev.c:6971 [inline]
         net_rx_action+0xa5a/0x19b0 net/core/dev.c:7093
         handle_softirqs+0x1a0/0x7c0 kernel/softirq.c:561
         __do_softirq+0x14/0x1a kernel/softirq.c:595
      
        Uninit was stored to memory at:
         put_unaligned_be32 include/linux/unaligned.h:68 [inline]
         mptcp_write_options+0x17f9/0x3100 net/mptcp/options.c:1417
         mptcp_options_write net/ipv4/tcp_output.c:465 [inline]
         tcp_options_write+0x6d9/0xe90 net/ipv4/tcp_output.c:759
         __tcp_transmit_skb+0x294b/0x4900 net/ipv4/tcp_output.c:1414
         tcp_transmit_skb net/ipv4/tcp_output.c:1486 [inline]
         tcp_write_xmit+0x3b90/0x9070 net/ipv4/tcp_output.c:2829
         __tcp_push_pending_frames+0xc4/0x380 net/ipv4/tcp_output.c:3012
         tcp_send_fin+0x9f6/0xf50 net/ipv4/tcp_output.c:3618
         __tcp_close+0x140c/0x1550 net/ipv4/tcp.c:3130
         __mptcp_close_ssk+0x74e/0x16f0 net/mptcp/protocol.c:2496
         mptcp_close_ssk+0x26b/0x2c0 net/mptcp/protocol.c:2550
         mptcp_pm_nl_rm_addr_or_subflow+0x635/0xd10 net/mptcp/pm_netlink.c:889
         mptcp_pm_nl_rm_subflow_received net/mptcp/pm_netlink.c:924 [inline]
         mptcp_pm_flush_addrs_and_subflows net/mptcp/pm_netlink.c:1688 [inline]
         mptcp_nl_flush_addrs_list net/mptcp/pm_netlink.c:1709 [inline]
         mptcp_pm_nl_flush_addrs_doit+0xe10/0x1630 net/mptcp/pm_netlink.c:1750
         genl_family_rcv_msg_doit net/netlink/genetlink.c:1115 [inline]
         genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
         genl_rcv_msg+0x1214/0x12c0 net/netlink/genetlink.c:1210
         netlink_rcv_skb+0x375/0x650 net/netlink/af_netlink.c:2542
         genl_rcv+0x40/0x60 net/netlink/genetlink.c:1219
         netlink_unicast_kernel net/netlink/af_netlink.c:1321 [inline]
         netlink_unicast+0xf52/0x1260 net/netlink/af_netlink.c:1347
         netlink_sendmsg+0x10da/0x11e0 net/netlink/af_netlink.c:1891
         sock_sendmsg_nosec net/socket.c:711 [inline]
         __sock_sendmsg+0x30f/0x380 net/socket.c:726
         ____sys_sendmsg+0x877/0xb60 net/socket.c:2583
         ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2637
         __sys_sendmsg net/socket.c:2669 [inline]
         __do_sys_sendmsg net/socket.c:2674 [inline]
         __se_sys_sendmsg net/socket.c:2672 [inline]
         __x64_sys_sendmsg+0x212/0x3c0 net/socket.c:2672
         x64_sys_call+0x2ed6/0x3c30 arch/x86/include/generated/asm/syscalls_64.h:47
         do_syscall_x64 arch/x86/entry/common.c:52 [inline]
         do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
         entry_SYSCALL_64_after_hwframe+0x77/0x7f
      
        Uninit was stored to memory at:
         mptcp_pm_add_addr_signal+0x3d7/0x4c0
         mptcp_established_options_add_addr net/mptcp/options.c:666 [inline]
         mptcp_established_options+0x1b9b/0x3a00 net/mptcp/options.c:884
         tcp_established_options+0x2c4/0x7d0 net/ipv4/tcp_output.c:1012
         __tcp_transmit_skb+0x5b7/0x4900 net/ipv4/tcp_output.c:1333
         tcp_transmit_skb net/ipv4/tcp_output.c:1486 [inline]
         tcp_write_xmit+0x3b90/0x9070 net/ipv4/tcp_output.c:2829
         __tcp_push_pending_frames+0xc4/0x380 net/ipv4/tcp_output.c:3012
         tcp_send_fin+0x9f6/0xf50 net/ipv4/tcp_output.c:3618
         __tcp_close+0x140c/0x1550 net/ipv4/tcp.c:3130
         __mptcp_close_ssk+0x74e/0x16f0 net/mptcp/protocol.c:2496
         mptcp_close_ssk+0x26b/0x2c0 net/mptcp/protocol.c:2550
         mptcp_pm_nl_rm_addr_or_subflow+0x635/0xd10 net/mptcp/pm_netlink.c:889
         mptcp_pm_nl_rm_subflow_received net/mptcp/pm_netlink.c:924 [inline]
         mptcp_pm_flush_addrs_and_subflows net/mptcp/pm_netlink.c:1688 [inline]
         mptcp_nl_flush_addrs_list net/mptcp/pm_netlink.c:1709 [inline]
         mptcp_pm_nl_flush_addrs_doit+0xe10/0x1630 net/mptcp/pm_netlink.c:1750
         genl_family_rcv_msg_doit net/netlink/genetlink.c:1115 [inline]
         genl_family_rcv_msg net/netlink/genetlink.c:1195 [inline]
         genl_rcv_msg+0x1214/0x12c0 net/netlink/genetlink.c:1210
         netlink_rcv_skb+0x375/0x650 net/netlink/af_netlink.c:2542
         genl_rcv+0x40/0x60 net/netlink/genetlink.c:1219
         netlink_unicast_kernel net/netlink/af_netlink.c:1321 [inline]
         netlink_unicast+0xf52/0x1260 net/netlink/af_netlink.c:1347
         netlink_sendmsg+0x10da/0x11e0 net/netlink/af_netlink.c:1891
         sock_sendmsg_nosec net/socket.c:711 [inline]
         __sock_sendmsg+0x30f/0x380 net/socket.c:726
         ____sys_sendmsg+0x877/0xb60 net/socket.c:2583
         ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2637
         __sys_sendmsg net/socket.c:2669 [inline]
         __do_sys_sendmsg net/socket.c:2674 [inline]
         __se_sys_sendmsg net/socket.c:2672 [inline]
         __x64_sys_sendmsg+0x212/0x3c0 net/socket.c:2672
         x64_sys_call+0x2ed6/0x3c30 arch/x86/include/generated/asm/syscalls_64.h:47
         do_syscall_x64 arch/x86/entry/common.c:52 [inline]
         do_syscall_64+0xcd/0x1e0 arch/x86/entry/common.c:83
         entry_SYSCALL_64_after_hwframe+0x77/0x7f
      
        Uninit was stored to memory at:
         mptcp_pm_add_addr_received+0x95f/0xdd0 net/mptcp/pm.c:235
         mptcp_incoming_options+0x2983/0x3d30 net/mptcp/options.c:1169
         tcp_data_queue+0xb4/0x7be0 net/ipv4/tcp_input.c:5233
         tcp_rcv_state_process+0x2a38/0x49d0 net/ipv4/tcp_input.c:6972
         tcp_v4_do_rcv+0xbf9/0x11a0 net/ipv4/tcp_ipv4.c:1939
         tcp_v4_rcv+0x51df/0x5750 net/ipv4/tcp_ipv4.c:2351
         ip_protocol_deliver_rcu+0x2a3/0x13d0 net/ipv4/ip_input.c:205
         ip_local_deliver_finish+0x336/0x500 net/ipv4/ip_input.c:233
         NF_HOOK include/linux/netfilter.h:314 [inline]
         ip_local_deliver+0x21f/0x490 net/ipv4/ip_input.c:254
         dst_input include/net/dst.h:460 [inline]
         ip_rcv_finish+0x4a2/0x520 net/ipv4/ip_input.c:447
         NF_HOOK include/linux/netfilter.h:314 [inline]
         ip_rcv+0xcd/0x380 net/ipv4/ip_input.c:567
         __netif_receive_skb_one_core net/core/dev.c:5704 [inline]
         __netif_receive_skb+0x319/0xa00 net/core/dev.c:5817
         process_backlog+0x4ad/0xa50 net/core/dev.c:6149
         __napi_poll+0xe7/0x980 net/core/dev.c:6902
         napi_poll net/core/dev.c:6971 [inline]
         net_rx_action+0xa5a/0x19b0 net/core/dev.c:7093
         handle_softirqs+0x1a0/0x7c0 kernel/softirq.c:561
         __do_softirq+0x14/0x1a kernel/softirq.c:595
      
        Local variable mp_opt created at:
         mptcp_incoming_options+0x119/0x3d30 net/mptcp/options.c:1127
         tcp_data_queue+0xb4/0x7be0 net/ipv4/tcp_input.c:5233
      
      The current schema is too fragile; address the issue grouping all the
      state-related data together and clearing the whole group instead of
      just the bitmask. This also cleans-up the code a bit, as there is no
      need to individually clear "random" bitfield in a couple of places
      any more.
      
      Fixes: 84dfe367 ("mptcp: send out dedicated ADD_ADDR packet")
      Cc: stable@vger.kernel.org
      Reported-by: default avatar <syzbot+23728c2df58b3bd175ad@syzkaller.appspotmail.com>
      Closes: https://lore.kernel.org/6786ac51.050a0220.216c54.00a7.GAE@google.com
      Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/541
      
      
      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://patch.msgid.link/20250123-net-mptcp-syzbot-issues-v1-1-af73258a726f@kernel.org
      
      
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6169e942
    • Abel Vesa's avatar
      clk: qcom: gcc-x1e80100: Do not turn off usb_2 controller GDSC · 9a49748e
      Abel Vesa authored
      
      commit d26c4ad3 upstream.
      
      Allowing the usb_2 controller GDSC to be turned off during system suspend
      renders the controller unable to resume.
      
      So use PWRSTS_RET_ON instead in order to make sure this the GDSC doesn't
      go down.
      
      Fixes: 161b7c40 ("clk: qcom: Add Global Clock controller (GCC) driver for X1E80100")
      Cc: stable@vger.kernel.org      # 6.8
      Signed-off-by: default avatarAbel Vesa <abel.vesa@linaro.org>
      Reviewed-by: default avatarJohan Hovold <johan+linaro@kernel.org>
      Tested-by: default avatarJohan Hovold <johan+linaro@kernel.org>
      Link: https://lore.kernel.org/r/20250107-x1e80100-clk-gcc-fix-usb2-gdsc-pwrsts-v1-1-e15d1a5e7d80@linaro.org
      
      
      Signed-off-by: default avatarBjorn Andersson <andersson@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      9a49748e
    • Kyle Tso's avatar
      usb: typec: tcpci: Prevent Sink disconnection before vPpsShutdown in SPR PPS · 15b50cbc
      Kyle Tso authored
      
      commit 4d27afbf upstream.
      
      The Source can drop its output voltage to the minimum of the requested
      PPS APDO voltage range when it is in Current Limit Mode. If this voltage
      falls within the range of vPpsShutdown, the Source initiates a Hard
      Reset and discharges Vbus. However, currently the Sink may disconnect
      before the voltage reaches vPpsShutdown, leading to unexpected behavior.
      
      Prevent premature disconnection by setting the Sink's disconnect
      threshold to the minimum vPpsShutdown value. Additionally, consider the
      voltage drop due to IR drop when calculating the appropriate threshold.
      This ensures a robust and reliable interaction between the Source and
      Sink during SPR PPS Current Limit Mode operation.
      
      Fixes: 4288debe ("usb: typec: tcpci: Fix up sink disconnect thresholds for PD")
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarKyle Tso <kyletso@google.com>
      Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
      Reviewed-by: default avatarBadhri Jagan Sridharan <badhri@google.com>
      Link: https://lore.kernel.org/r/20250114142435.2093857-1-kyletso@google.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      15b50cbc
    • Jos Wang's avatar
      usb: typec: tcpm: set SRC_SEND_CAPABILITIES timeout to PD_T_SENDER_RESPONSE · ce5c91a1
      Jos Wang authored
      
      commit 2eb3da03 upstream.
      
      As PD2.0 spec ("8.3.3.2.3 PE_SRC_Send_Capabilities state"), after the
      Source receives the GoodCRC Message from the Sink in response to the
      Source_Capabilities message, it should start the SenderResponseTimer,
      after the timer times out, the state machine transitions to the
      HARD_RESET state.
      
      Fixes: f0690a25 ("staging: typec: USB Type-C Port Manager (tcpm)")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarJos Wang <joswang@lenovo.com>
      Reviewed-by: default avatarBadhri Jagan Sridharan <badhri@google.com>
      Link: https://lore.kernel.org/r/20250105135245.7493-1-joswang1221@gmail.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ce5c91a1
    • Ray Chi's avatar
      usb: dwc3: Skip resume if pm_runtime_set_active() fails · 01c74aea
      Ray Chi authored
      
      commit e3a9bd24 upstream.
      
      When the system begins to enter suspend mode, dwc3_suspend() is called
      by PM suspend. There is a problem that if someone interrupt the system
      suspend process between dwc3_suspend() and pm_suspend() of its parent
      device, PM suspend will be canceled and attempt to resume suspended
      devices so that dwc3_resume() will be called. However, dwc3 and its
      parent device (like the power domain or glue driver) may already be
      suspended by runtime PM in fact. If this sutiation happened, the
      pm_runtime_set_active() in dwc3_resume() will return an error since
      parent device was suspended. This can lead to unexpected behavior if
      DWC3 proceeds to execute dwc3_resume_common().
      
      EX.
      RPM suspend: ... -> dwc3_runtime_suspend()
                            -> rpm_suspend() of parent device
      ...
      PM suspend: ... -> dwc3_suspend() -> pm_suspend of parent device
                                       ^ interrupt, so resume suspended device
                ...  <-  dwc3_resume()  <-/
                            ^ pm_runtime_set_active() returns error
      
      To prevent the problem, this commit will skip dwc3_resume_common() and
      return the error if pm_runtime_set_active() fails.
      
      Fixes: 68c26fe5 ("usb: dwc3: set pm runtime active before resume common")
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarRay Chi <raychi@google.com>
      Acked-by: default avatarThinh Nguyen <Thinh.Nguyen@synopsys.com>
      Link: https://lore.kernel.org/r/20250106082240.3822059-1-raychi@google.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      01c74aea
    • Kyle Tso's avatar
      usb: dwc3: core: Defer the probe until USB power supply ready · ebba1beb
      Kyle Tso authored
      
      commit 66e0ea34 upstream.
      
      Currently, DWC3 driver attempts to acquire the USB power supply only
      once during the probe. If the USB power supply is not ready at that
      time, the driver simply ignores the failure and continues the probe,
      leading to permanent non-functioning of the gadget vbus_draw callback.
      
      Address this problem by delaying the dwc3 driver initialization until
      the USB power supply is registered.
      
      Fixes: 6f0764b5 ("usb: dwc3: add a power supply for current control")
      Cc: stable <stable@kernel.org>
      Signed-off-by: default avatarKyle Tso <kyletso@google.com>
      Acked-by: default avatarThinh Nguyen <Thinh.Nguyen@synopsys.com>
      Link: https://lore.kernel.org/r/20250115044548.2701138-1-kyletso@google.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ebba1beb
    • Joe Hattori's avatar
      usb: dwc3-am62: Fix an OF node leak in phy_syscon_pll_refclk() · e5dd5bfc
      Joe Hattori authored
      
      commit a266462b upstream.
      
      phy_syscon_pll_refclk() leaks an OF node obtained by
      of_parse_phandle_with_fixed_args(), thus add an of_node_put() call.
      
      Cc: stable <stable@kernel.org>
      Fixes: e8784c0a ("drivers: usb: dwc3: Add AM62 USB wrapper driver")
      Signed-off-by: default avatarJoe Hattori <joe@pf.is.s.u-tokyo.ac.jp>
      Acked-by: default avatarThinh Nguyen <Thinh.Nguyen@synopsys.com>
      Link: https://lore.kernel.org/r/20250109001638.70033-1-joe@pf.is.s.u-tokyo.ac.jp
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      e5dd5bfc
    • Thinh Nguyen's avatar
      usb: gadget: f_tcm: Fix Get/SetInterface return value · b69805e3
      Thinh Nguyen authored
      
      commit 3b997089 upstream.
      
      Check to make sure that the GetInterface and SetInterface are for valid
      interface. Return proper alternate setting number on GetInterface.
      
      Fixes: 0b8b1a1f ("usb: gadget: f_tcm: Provide support to get alternate setting in tcm function")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarThinh Nguyen <Thinh.Nguyen@synopsys.com>
      Link: https://lore.kernel.org/r/ffd91b4640945ea4d3b4f4091cf1abbdbd9cf4fc.1733876548.git.Thinh.Nguyen@synopsys.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b69805e3
    • Sean Rhodes's avatar
      drivers/card_reader/rtsx_usb: Restore interrupt based detection · a1fd89c0
      Sean Rhodes authored
      
      commit 235b630e upstream.
      
      This commit reintroduces interrupt-based card detection previously
      used in the rts5139 driver. This functionality was removed in commit
      00d8521d ("staging: remove rts5139 driver code").
      
      Reintroducing this mechanism fixes presence detection for certain card
      readers, which with the current driver, will taken approximately 20
      seconds to enter S3 as `mmc_rescan` has to be frozen.
      
      Fixes: 00d8521d ("staging: remove rts5139 driver code")
      Cc: stable@vger.kernel.org
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarSean Rhodes <sean@starlabs.systems>
      Link: https://lore.kernel.org/r/20241119085815.11769-1-sean@starlabs.systems
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      a1fd89c0
    • Michal Pecio's avatar
      usb: xhci: Fix NULL pointer dereference on certain command aborts · ae069cd2
      Michal Pecio authored
      commit 1e0a1991 upstream.
      
      If a command is queued to the final usable TRB of a ring segment, the
      enqueue pointer is advanced to the subsequent link TRB and no further.
      If the command is later aborted, when the abort completion is handled
      the dequeue pointer is advanced to the first TRB of the next segment.
      
      If no further commands are queued, xhci_handle_stopped_cmd_ring() sees
      the ring pointers unequal and assumes that there is a pending command,
      so it calls xhci_mod_cmd_timer() which crashes if cur_cmd was NULL.
      
      Don't attempt timer setup if cur_cmd is NULL. The subsequent doorbell
      ring likely is unnecessary too, but it's harmless. Leave it alone.
      
      This is probably Bug 219532, but no confirmation has been received.
      
      The issue has been independently reproduced and confirmed fixed using
      a USB MCU programmed to NAK the Status stage of SET_ADDRESS forever.
      Everything continued working normally after several prevented crashes.
      
      Link: https://bugzilla.kernel.org/show_bug.cgi?id=219532
      
      
      Fixes: c311e391 ("xhci: rework command timeout and cancellation,")
      CC: stable@vger.kernel.org
      Signed-off-by: default avatarMichal Pecio <michal.pecio@gmail.com>
      Signed-off-by: default avatarMathias Nyman <mathias.nyman@linux.intel.com>
      Link: https://lore.kernel.org/r/20241227120142.1035206-4-mathias.nyman@linux.intel.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      ae069cd2
    • Nikita Zhandarovich's avatar
      net: usb: rtl8150: enable basic endpoint checking · f395b7ef
      Nikita Zhandarovich authored
      
      commit 90b7f296 upstream.
      
      Syzkaller reports [1] encountering a common issue of utilizing a wrong
      usb endpoint type during URB submitting stage. This, in turn, triggers
      a warning shown below.
      
      For now, enable simple endpoint checking (specifically, bulk and
      interrupt eps, testing control one is not essential) to mitigate
      the issue with a view to do other related cosmetic changes later,
      if they are necessary.
      
      [1] Syzkaller report:
      usb 1-1: BOGUS urb xfer, pipe 3 != type 1
      WARNING: CPU: 1 PID: 2586 at drivers/usb/core/urb.c:503 usb_submit_urb+0xe4b/0x1730 driv>
      Modules linked in:
      CPU: 1 UID: 0 PID: 2586 Comm: dhcpcd Not tainted 6.11.0-rc4-syzkaller-00069-gfc88bb11617>
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/06/2024
      RIP: 0010:usb_submit_urb+0xe4b/0x1730 drivers/usb/core/urb.c:503
      Code: 84 3c 02 00 00 e8 05 e4 fc fc 4c 89 ef e8 fd 25 d7 fe 45 89 e0 89 e9 4c 89 f2 48 8>
      RSP: 0018:ffffc9000441f740 EFLAGS: 00010282
      RAX: 0000000000000000 RBX: ffff888112487a00 RCX: ffffffff811a99a9
      RDX: ffff88810df6ba80 RSI: ffffffff811a99b6 RDI: 0000000000000001
      RBP: 0000000000000003 R08: 0000000000000001 R09: 0000000000000000
      R10: 0000000000000000 R11: 0000000000000001 R12: 0000000000000001
      R13: ffff8881023bf0a8 R14: ffff888112452a20 R15: ffff888112487a7c
      FS:  00007fc04eea5740(0000) GS:ffff8881f6300000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f0a1de9f870 CR3: 000000010dbd0000 CR4: 00000000003506f0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      Call Trace:
       <TASK>
       rtl8150_open+0x300/0xe30 drivers/net/usb/rtl8150.c:733
       __dev_open+0x2d4/0x4e0 net/core/dev.c:1474
       __dev_change_flags+0x561/0x720 net/core/dev.c:8838
       dev_change_flags+0x8f/0x160 net/core/dev.c:8910
       devinet_ioctl+0x127a/0x1f10 net/ipv4/devinet.c:1177
       inet_ioctl+0x3aa/0x3f0 net/ipv4/af_inet.c:1003
       sock_do_ioctl+0x116/0x280 net/socket.c:1222
       sock_ioctl+0x22e/0x6c0 net/socket.c:1341
       vfs_ioctl fs/ioctl.c:51 [inline]
       __do_sys_ioctl fs/ioctl.c:907 [inline]
       __se_sys_ioctl fs/ioctl.c:893 [inline]
       __x64_sys_ioctl+0x193/0x220 fs/ioctl.c:893
       do_syscall_x64 arch/x86/entry/common.c:52 [inline]
       do_syscall_64+0xcd/0x250 arch/x86/entry/common.c:83
       entry_SYSCALL_64_after_hwframe+0x77/0x7f
      RIP: 0033:0x7fc04ef73d49
      ...
      
      This change has not been tested on real hardware.
      
      Reported-and-tested-by: default avatar <syzbot+d7e968426f644b567e31@syzkaller.appspotmail.com>
      Closes: https://syzkaller.appspot.com/bug?extid=d7e968426f644b567e31
      
      
      Fixes: 1da177e4 ("Linux-2.6.12-rc2")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarNikita Zhandarovich <n.zhandarovich@fintech.ru>
      Link: https://patch.msgid.link/20250124093020.234642-1-n.zhandarovich@fintech.ru
      
      
      Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f395b7ef
Loading