Changelog in Linux kernel 6.1.169

 
ACPI: EC: Evaluate _REG outside the EC scope more carefully [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Sat Apr 11 21:02:30 2026 -0400

    ACPI: EC: Evaluate _REG outside the EC scope more carefully
    
    [ Upstream commit 71bf41b8e913ec9fc91f0d39ab8fb320229ec604 ]
    
    Commit 60fa6ae6e6d0 ("ACPI: EC: Install address space handler at the
    namespace root") caused _REG methods for EC operation regions outside
    the EC device scope to be evaluated which on some systems leads to the
    evaluation of _REG methods in the scopes of device objects representing
    devices that are not present and not functional according to the _STA
    return values. Some of those device objects represent EC "alternatives"
    and if _REG is evaluated for their operation regions, the platform
    firmware may be confused and the platform may start to behave
    incorrectly.
    
    To avoid this problem, only evaluate _REG for EC operation regions
    located in the scopes of device objects representing known-to-be-present
    devices.
    
    For this purpose, partially revert commit 60fa6ae6e6d0 and trigger the
    evaluation of _REG for EC operation regions from acpi_bus_attach() for
    the known-valid devices.
    
    Fixes: 60fa6ae6e6d0 ("ACPI: EC: Install address space handler at the namespace root")
    Link: https://lore.kernel.org/linux-acpi/1f76b7e2-1928-4598-8037-28a1785c2d13@redhat.com
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=2298938
    Link: https://bugzilla.redhat.com/show_bug.cgi?id=2302253
    Reported-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Cc: All applicable <stable@vger.kernel.org>
    Link: https://patch.msgid.link/23612351.6Emhk5qWAg@rjwysocki.net
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
ACPICA: Add a depth argument to acpi_execute_reg_methods() [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Sat Apr 11 21:02:29 2026 -0400

    ACPICA: Add a depth argument to acpi_execute_reg_methods()
    
    [ Upstream commit cdf65d73e001fde600b18d7e45afadf559425ce5 ]
    
    A subsequent change will need to pass a depth argument to
    acpi_execute_reg_methods(), so prepare that function for it.
    
    No intentional functional changes.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Cc: All applicable <stable@vger.kernel.org>
    Link: https://patch.msgid.link/8451567.NyiUUSuA9g@rjwysocki.net
    Stable-dep-of: 71bf41b8e913 ("ACPI: EC: Evaluate _REG outside the EC scope more carefully")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
apparmor: fix differential encoding verification [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Sun Apr 12 23:39:18 2026 -0700

    apparmor: fix differential encoding verification
    
    commit 39440b137546a3aa383cfdabc605fb73811b6093 upstream.
    
    Differential encoding allows loops to be created if it is abused. To
    prevent this the unpack should verify that a diff-encode chain
    terminates.
    
    Unfortunately the differential encode verification had two bugs.
    
    1. it conflated states that had gone through check and already been
       marked, with states that were currently being checked and marked.
       This means that loops in the current chain being verified are treated
       as a chain that has already been verified.
    
    2. the order bailout on already checked states compared current chain
       check iterators j,k instead of using the outer loop iterator i.
       Meaning a step backwards in states in the current chain verification
       was being mistaken for moving to an already verified state.
    
    Move to a double mark scheme where already verified states get a
    different mark, than the current chain being kept. This enables us
    to also drop the backwards verification check that was the cause of
    the second error as any already verified state is already marked.
    
    Fixes: 031dcc8f4e84 ("apparmor: dfa add support for state differential encoding")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: Fix double free of ns_name in aa_replace_profiles() [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Sun Apr 12 23:39:16 2026 -0700

    apparmor: Fix double free of ns_name in aa_replace_profiles()
    
    commit 5df0c44e8f5f619d3beb871207aded7c78414502 upstream.
    
    if ns_name is NULL after
    1071         error = aa_unpack(udata, &lh, &ns_name);
    
    and if ent->ns_name contains an ns_name in
    1089                 } else if (ent->ns_name) {
    
    then ns_name is assigned the ent->ns_name
    1095                         ns_name = ent->ns_name;
    
    however ent->ns_name is freed at
    1262                 aa_load_ent_free(ent);
    
    and then again when freeing ns_name at
    1270         kfree(ns_name);
    
    Fix this by NULLing out ent->ns_name after it is transferred to ns_name
    
    Fixes: 145a0ef21c8e9 ("apparmor: fix blob compression when ns is forced on a policy load
    ")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix memory leak in verify_header [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Sun Apr 12 23:39:11 2026 -0700

    apparmor: fix memory leak in verify_header
    
    commit e38c55d9f834e5b848bfed0f5c586aaf45acb825 upstream.
    
    The function sets `*ns = NULL` on every call, leaking the namespace
    string allocated in previous iterations when multiple profiles are
    unpacked. This also breaks namespace consistency checking since *ns
    is always NULL when the comparison is made.
    
    Remove the incorrect assignment.
    The caller (aa_unpack) initializes *ns to NULL once before the loop,
    which is sufficient.
    
    Fixes: dd51c8485763 ("apparmor: provide base for multiple profiles to be replaced at once")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix missing bounds check on DEFAULT table in verify_dfa() [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Sun Apr 12 23:39:15 2026 -0700

    apparmor: fix missing bounds check on DEFAULT table in verify_dfa()
    
    commit d352873bbefa7eb39995239d0b44ccdf8aaa79a4 upstream.
    
    The verify_dfa() function only checks DEFAULT_TABLE bounds when the state
    is not differentially encoded.
    
    When the verification loop traverses the differential encoding chain,
    it reads k = DEFAULT_TABLE[j] and uses k as an array index without
    validation. A malformed DFA with DEFAULT_TABLE[j] >= state_count,
    therefore, causes both out-of-bounds reads and writes.
    
    [   57.179855] ==================================================================
    [   57.180549] BUG: KASAN: slab-out-of-bounds in verify_dfa+0x59a/0x660
    [   57.180904] Read of size 4 at addr ffff888100eadec4 by task su/993
    
    [   57.181554] CPU: 1 UID: 0 PID: 993 Comm: su Not tainted 6.19.0-rc7-next-20260127 #1 PREEMPT(lazy)
    [   57.181558] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   57.181563] Call Trace:
    [   57.181572]  <TASK>
    [   57.181577]  dump_stack_lvl+0x5e/0x80
    [   57.181596]  print_report+0xc8/0x270
    [   57.181605]  ? verify_dfa+0x59a/0x660
    [   57.181608]  kasan_report+0x118/0x150
    [   57.181620]  ? verify_dfa+0x59a/0x660
    [   57.181623]  verify_dfa+0x59a/0x660
    [   57.181627]  aa_dfa_unpack+0x1610/0x1740
    [   57.181629]  ? __kmalloc_cache_noprof+0x1d0/0x470
    [   57.181640]  unpack_pdb+0x86d/0x46b0
    [   57.181647]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181653]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181656]  ? aa_unpack_nameX+0x1a8/0x300
    [   57.181659]  aa_unpack+0x20b0/0x4c30
    [   57.181662]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181664]  ? stack_depot_save_flags+0x33/0x700
    [   57.181681]  ? kasan_save_track+0x4f/0x80
    [   57.181683]  ? kasan_save_track+0x3e/0x80
    [   57.181686]  ? __kasan_kmalloc+0x93/0xb0
    [   57.181688]  ? __kvmalloc_node_noprof+0x44a/0x780
    [   57.181693]  ? aa_simple_write_to_buffer+0x54/0x130
    [   57.181697]  ? policy_update+0x154/0x330
    [   57.181704]  aa_replace_profiles+0x15a/0x1dd0
    [   57.181707]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181710]  ? __kvmalloc_node_noprof+0x44a/0x780
    [   57.181712]  ? aa_loaddata_alloc+0x77/0x140
    [   57.181715]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   57.181717]  ? _copy_from_user+0x2a/0x70
    [   57.181730]  policy_update+0x17a/0x330
    [   57.181733]  profile_replace+0x153/0x1a0
    [   57.181735]  ? rw_verify_area+0x93/0x2d0
    [   57.181740]  vfs_write+0x235/0xab0
    [   57.181745]  ksys_write+0xb0/0x170
    [   57.181748]  do_syscall_64+0x8e/0x660
    [   57.181762]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [   57.181765] RIP: 0033:0x7f6192792eb2
    
    Remove the MATCH_FLAG_DIFF_ENCODE condition to validate all DEFAULT_TABLE
    entries unconditionally.
    
    Fixes: 031dcc8f4e84 ("apparmor: dfa add support for state differential encoding")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix race between freeing data and fs accessing it [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Sun Apr 12 23:39:20 2026 -0700

    apparmor: fix race between freeing data and fs accessing it
    
    commit 8e135b8aee5a06c52a4347a5a6d51223c6f36ba3 upstream.
    
    Backport for conflicts introdued by conversion from sha1 to sha256
    introduced in
      e44a4dc4b36c ("apparmor: switch SECURITY_APPARMOR_HASH from sha1 to sha256")
    
    AppArmor was putting the reference to i_private data on its end after
    removing the original entry from the file system. However the inode
    can and does live beyond that point and it is possible that some of
    the fs call back functions will be invoked after the reference has
    been put, which results in a race between freeing the data and
    accessing it through the fs.
    
    While the rawdata/loaddata is the most likely candidate to fail the
    race, as it has the fewest references. If properly crafted it might be
    possible to trigger a race for the other types stored in i_private.
    
    Fix this by moving the put of i_private referenced data to the correct
    place which is during inode eviction.
    
    Fixes: c961ee5f21b20 ("apparmor: convert from securityfs to apparmorfs for policy ns files")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Maxime Bélair <maxime.belair@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix race on rawdata dereference [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Sun Apr 12 23:39:19 2026 -0700

    apparmor: fix race on rawdata dereference
    
    commit a0b7091c4de45a7325c8780e6934a894f92ac86b upstream.
    
    There is a race condition that leads to a use-after-free situation:
    because the rawdata inodes are not refcounted, an attacker can start
    open()ing one of the rawdata files, and at the same time remove the
    last reference to this rawdata (by removing the corresponding profile,
    for example), which frees its struct aa_loaddata; as a result, when
    seq_rawdata_open() is reached, i_private is a dangling pointer and
    freed memory is accessed.
    
    The rawdata inodes weren't refcounted to avoid a circular refcount and
    were supposed to be held by the profile rawdata reference.  However
    during profile removal there is a window where the vfs and profile
    destruction race, resulting in the use after free.
    
    Fix this by moving to a double refcount scheme. Where the profile
    refcount on rawdata is used to break the circular dependency. Allowing
    for freeing of the rawdata once all inode references to the rawdata
    are put.
    
    Fixes: 5d5182cae401 ("apparmor: move to per loaddata files, instead of replicating in profiles")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Maxime Bélair <maxime.belair@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix side-effect bug in match_char() macro usage [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Sun Apr 12 23:39:14 2026 -0700

    apparmor: fix side-effect bug in match_char() macro usage
    
    commit 8756b68edae37ff546c02091989a4ceab3f20abd upstream.
    
    The match_char() macro evaluates its character parameter multiple
    times when traversing differential encoding chains. When invoked
    with *str++, the string pointer advances on each iteration of the
    inner do-while loop, causing the DFA to check different characters
    at each iteration and therefore skip input characters.
    This results in out-of-bounds reads when the pointer advances past
    the input buffer boundary.
    
    [   94.984676] ==================================================================
    [   94.985301] BUG: KASAN: slab-out-of-bounds in aa_dfa_match+0x5ae/0x760
    [   94.985655] Read of size 1 at addr ffff888100342000 by task file/976
    
    [   94.986319] CPU: 7 UID: 1000 PID: 976 Comm: file Not tainted 6.19.0-rc7-next-20260127 #1 PREEMPT(lazy)
    [   94.986322] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
    [   94.986329] Call Trace:
    [   94.986341]  <TASK>
    [   94.986347]  dump_stack_lvl+0x5e/0x80
    [   94.986374]  print_report+0xc8/0x270
    [   94.986384]  ? aa_dfa_match+0x5ae/0x760
    [   94.986388]  kasan_report+0x118/0x150
    [   94.986401]  ? aa_dfa_match+0x5ae/0x760
    [   94.986405]  aa_dfa_match+0x5ae/0x760
    [   94.986408]  __aa_path_perm+0x131/0x400
    [   94.986418]  aa_path_perm+0x219/0x2f0
    [   94.986424]  apparmor_file_open+0x345/0x570
    [   94.986431]  security_file_open+0x5c/0x140
    [   94.986442]  do_dentry_open+0x2f6/0x1120
    [   94.986450]  vfs_open+0x38/0x2b0
    [   94.986453]  ? may_open+0x1e2/0x2b0
    [   94.986466]  path_openat+0x231b/0x2b30
    [   94.986469]  ? __x64_sys_openat+0xf8/0x130
    [   94.986477]  do_file_open+0x19d/0x360
    [   94.986487]  do_sys_openat2+0x98/0x100
    [   94.986491]  __x64_sys_openat+0xf8/0x130
    [   94.986499]  do_syscall_64+0x8e/0x660
    [   94.986515]  ? count_memcg_events+0x15f/0x3c0
    [   94.986526]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986540]  ? handle_mm_fault+0x1639/0x1ef0
    [   94.986551]  ? vma_start_read+0xf0/0x320
    [   94.986558]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986561]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986563]  ? fpregs_assert_state_consistent+0x50/0xe0
    [   94.986572]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986574]  ? arch_exit_to_user_mode_prepare+0x9/0xb0
    [   94.986587]  ? srso_alias_return_thunk+0x5/0xfbef5
    [   94.986588]  ? irqentry_exit+0x3c/0x590
    [   94.986595]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
    [   94.986597] RIP: 0033:0x7fda4a79c3ea
    
    Fix by extracting the character value before invoking match_char,
    ensuring single evaluation per outer loop.
    
    Fixes: 074c1cd798cb ("apparmor: dfa move character match into a macro")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix unprivileged local user can do privileged policy management [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Sun Apr 12 23:39:17 2026 -0700

    apparmor: fix unprivileged local user can do privileged policy management
    
    commit 6601e13e82841879406bf9f369032656f441a425 upstream.
    
    Backport for api changes introduced in
    90c436a64a6e ("apparmor: pass cred through to audit info.")
    
    An unprivileged local user can load, replace, and remove profiles by
    opening the apparmorfs interfaces, via a confused deputy attack, by
    passing the opened fd to a privileged process, and getting the
    privileged process to write to the interface.
    
    This does require a privileged target that can be manipulated to do
    the write for the unprivileged process, but once such access is
    achieved full policy management is possible and all the possible
    implications that implies: removing confinement, DoS of system or
    target applications by denying all execution, by-passing the
    unprivileged user namespace restriction, to exploiting kernel bugs for
    a local privilege escalation.
    
    The policy management interface can not have its permissions simply
    changed from 0666 to 0600 because non-root processes need to be able
    to load policy to different policy namespaces.
    
    Instead ensure the task writing the interface has privileges that
    are a subset of the task that opened the interface. This is already
    done via policy for confined processes, but unconfined can delegate
    access to the opened fd, by-passing the usual policy check.
    
    Fixes: b7fd2c0340eac ("apparmor: add per policy ns .load, .replace, .remove interface files")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: fix: limit the number of levels of policy namespaces [+ + +]
Author: John Johansen <john.johansen@canonical.com>
Date:   Sun Apr 12 23:39:13 2026 -0700

    apparmor: fix: limit the number of levels of policy namespaces
    
    commit 306039414932c80f8420695a24d4fe10c84ccfb2 upstream.
    
    Currently the number of policy namespaces is not bounded relying on
    the user namespace limit. However policy namespaces aren't strictly
    tied to user namespaces and it is possible to create them and nest
    them arbitrarily deep which can be used to exhaust system resource.
    
    Hard cap policy namespaces to the same depth as user namespaces.
    
    Fixes: c88d4c7b049e8 ("AppArmor: core policy routines")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Reviewed-by: Ryan Lee <ryan.lee@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: replace recursive profile removal with iterative approach [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Sun Apr 12 23:39:12 2026 -0700

    apparmor: replace recursive profile removal with iterative approach
    
    commit ab09264660f9de5d05d1ef4e225aa447c63a8747 upstream.
    
    The profile removal code uses recursion when removing nested profiles,
    which can lead to kernel stack exhaustion and system crashes.
    
    Reproducer:
      $ pf='a'; for ((i=0; i<1024; i++)); do
          echo -e "profile $pf { \n }" | apparmor_parser -K -a;
          pf="$pf//x";
      done
      $ echo -n a > /sys/kernel/security/apparmor/.remove
    
    Replace the recursive __aa_profile_list_release() approach with an
    iterative approach in __remove_profile(). The function repeatedly
    finds and removes leaf profiles until the entire subtree is removed,
    maintaining the same removal semantic without recursion.
    
    Fixes: c88d4c7b049e ("AppArmor: core policy routines")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

apparmor: validate DFA start states are in bounds in unpack_pdb [+ + +]
Author: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
Date:   Sun Apr 12 23:39:10 2026 -0700

    apparmor: validate DFA start states are in bounds in unpack_pdb
    
    commit 9063d7e2615f4a7ab321de6b520e23d370e58816 upstream.
    
    Backport for conflicts caused by
    ad596ea74e74 ("apparmor: group dfa policydb unpacking") which rearrange
    and consolidated the unpack.
    
    Start states are read from untrusted data and used as indexes into the
    DFA state tables. The aa_dfa_next() function call in unpack_pdb() will
    access dfa->tables[YYTD_ID_BASE][start], and if the start state exceeds
    the number of states in the DFA, this results in an out-of-bound read.
    
    ==================================================================
     BUG: KASAN: slab-out-of-bounds in aa_dfa_next+0x2a1/0x360
     Read of size 4 at addr ffff88811956fb90 by task su/1097
     ...
    
    Reject policies with out-of-bounds start states during unpacking
    to prevent the issue.
    
    Fixes: ad5ff3db53c6 ("AppArmor: Add ability to load extended policy")
    Reported-by: Qualys Security Advisory <qsa@qualys.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Reviewed-by: Georgia Garcia <georgia.garcia@canonical.com>
    Reviewed-by: Cengiz Can <cengiz.can@canonical.com>
    Signed-off-by: Massimiliano Pellizzer <massimiliano.pellizzer@canonical.com>
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
arm64: dts: hisilicon: hi3798cv200: Add missing dma-ranges [+ + +]
Author: Shawn Guo <shawnguo@kernel.org>
Date:   Fri Feb 27 15:22:10 2026 +0800

    arm64: dts: hisilicon: hi3798cv200: Add missing dma-ranges
    
    commit 1af997cad473d505248df6d9577183bb91f69670 upstream.
    
    Reboot starts failing on Poplar since commit 8424ecdde7df ("arm64: mm:
    Set ZONE_DMA size based on devicetree's dma-ranges"), which effectively
    changes zone_dma_bits from 30 to 32 for arm64 platforms that do not
    properly define dma-ranges in device tree.  It's unclear how Poplar reboot
    gets broken by this change exactly, but a dma-ranges limiting zone_dma to
    the first 1 GB fixes the regression.
    
    Fixes: 2f20182ed670 ("arm64: dts: hisilicon: add dts files for hi3798cv200-poplar board")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Wei Xu <xuwei5@hisilicon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

arm64: dts: hisilicon: poplar: Correct PCIe reset GPIO polarity [+ + +]
Author: Shawn Guo <shawnguo@kernel.org>
Date:   Fri Feb 27 15:19:58 2026 +0800

    arm64: dts: hisilicon: poplar: Correct PCIe reset GPIO polarity
    
    commit c1f2b0f2b5e37b2c27540a175aea2755a3799433 upstream.
    
    The PCIe reset GPIO on Poplar is actually active low.  The active high
    worked before because kernel driver didn't respect the setting from DT.
    This is changed since commit 1d26a55fbeb9 ("PCI: histb: Switch to using
    gpiod API"), and thus PCIe on Poplar got brken since then.
    
    Fix the problem by correcting the polarity.
    
    Fixes: 32fa01761bd9 ("arm64: dts: hi3798cv200: enable PCIe support for poplar board")
    Cc: stable@vger.kernel.org
    Signed-off-by: Shawn Guo <shawnguo@kernel.org>
    Signed-off-by: Wei Xu <xuwei5@hisilicon.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
batman-adv: hold claim backbone gateways by reference [+ + +]
Author: Haoze Xie <royenheart@gmail.com>
Date:   Mon Apr 6 21:17:28 2026 +0800

    batman-adv: hold claim backbone gateways by reference
    
    commit 82d8701b2c930d0e96b0dbc9115a218d791cb0d2 upstream.
    
    batadv_bla_add_claim() can replace claim->backbone_gw and drop the old
    gateway's last reference while readers still follow the pointer.
    
    The netlink claim dump path dereferences claim->backbone_gw->orig and
    takes claim->backbone_gw->crc_lock without pinning the underlying
    backbone gateway. batadv_bla_check_claim() still has the same naked
    pointer access pattern.
    
    Reuse batadv_bla_claim_get_backbone_gw() in both readers so they operate
    on a stable gateway reference until the read-side work is complete.
    This keeps the dump and claim-check paths aligned with the lifetime
    rules introduced for the other BLA claim readers.
    
    Fixes: 23721387c409 ("batman-adv: add basic bridge loop avoidance code")
    Fixes: 04f3f5bf1883 ("batman-adv: add B.A.T.M.A.N. Dump BLA claims via netlink")
    Cc: stable@vger.kernel.org
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Signed-off-by: Haoze Xie <royenheart@gmail.com>
    Signed-off-by: Ao Zhou <n05ec@lzu.edu.cn>
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

batman-adv: reject oversized global TT response buffers [+ + +]
Author: Ruide Cao <caoruide123@gmail.com>
Date:   Thu Apr 2 23:12:31 2026 +0800

    batman-adv: reject oversized global TT response buffers
    
    commit 3a359bf5c61d52e7f09754108309d637532164a6 upstream.
    
    batadv_tt_prepare_tvlv_global_data() builds the allocation length for a
    global TT response in 16-bit temporaries. When a remote originator
    advertises a large enough global TT, the TT payload length plus the VLAN
    header offset can exceed 65535 and wrap before kmalloc().
    
    The full-table response path still uses the original TT payload length when
    it fills tt_change, so the wrapped allocation is too small and
    batadv_tt_prepare_tvlv_global_data() writes past the end of the heap object
    before the later packet-size check runs.
    
    Fix this by rejecting TT responses whose TVLV value length cannot fit in
    the 16-bit TVLV payload length field.
    
    Fixes: 7ea7b4a14275 ("batman-adv: make the TT CRC logic VLAN specific")
    Cc: stable@vger.kernel.org
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Tested-by: Ren Wei <enjou1224z@gmail.com>
    Signed-off-by: Ruide Cao <caoruide123@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/i915/gt: fix refcount underflow in intel_engine_park_heartbeat [+ + +]
Author: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
Date:   Wed Apr 1 12:10:07 2026 +0200

    drm/i915/gt: fix refcount underflow in intel_engine_park_heartbeat
    
    commit 4c71fd099513bfa8acab529b626e1f0097b76061 upstream.
    
    A use-after-free / refcount underflow is possible when the heartbeat
    worker and intel_engine_park_heartbeat() race to release the same
    engine->heartbeat.systole request.
    
    The heartbeat worker reads engine->heartbeat.systole and calls
    i915_request_put() on it when the request is complete, but clears
    the pointer in a separate, non-atomic step. Concurrently, a request
    retirement on another CPU can drop the engine wakeref to zero, triggering
    __engine_park() -> intel_engine_park_heartbeat(). If the heartbeat
    timer is pending at that point, cancel_delayed_work() returns true and
    intel_engine_park_heartbeat() reads the stale non-NULL systole pointer
    and calls i915_request_put() on it again, causing a refcount underflow:
    
    ```
    <4> [487.221889] Workqueue: i915-unordered engine_retire [i915]
    <4> [487.222640] RIP: 0010:refcount_warn_saturate+0x68/0xb0
    ...
    <4> [487.222707] Call Trace:
    <4> [487.222711]  <TASK>
    <4> [487.222716]  intel_engine_park_heartbeat.part.0+0x6f/0x80 [i915]
    <4> [487.223115]  intel_engine_park_heartbeat+0x25/0x40 [i915]
    <4> [487.223566]  __engine_park+0xb9/0x650 [i915]
    <4> [487.223973]  ____intel_wakeref_put_last+0x2e/0xb0 [i915]
    <4> [487.224408]  __intel_wakeref_put_last+0x72/0x90 [i915]
    <4> [487.224797]  intel_context_exit_engine+0x7c/0x80 [i915]
    <4> [487.225238]  intel_context_exit+0xf1/0x1b0 [i915]
    <4> [487.225695]  i915_request_retire.part.0+0x1b9/0x530 [i915]
    <4> [487.226178]  i915_request_retire+0x1c/0x40 [i915]
    <4> [487.226625]  engine_retire+0x122/0x180 [i915]
    <4> [487.227037]  process_one_work+0x239/0x760
    <4> [487.227060]  worker_thread+0x200/0x3f0
    <4> [487.227068]  ? __pfx_worker_thread+0x10/0x10
    <4> [487.227075]  kthread+0x10d/0x150
    <4> [487.227083]  ? __pfx_kthread+0x10/0x10
    <4> [487.227092]  ret_from_fork+0x3d4/0x480
    <4> [487.227099]  ? __pfx_kthread+0x10/0x10
    <4> [487.227107]  ret_from_fork_asm+0x1a/0x30
    <4> [487.227141]  </TASK>
    ```
    
    Fix this by replacing the non-atomic pointer read + separate clear with
    xchg() in both racing paths. xchg() is a single indivisible hardware
    instruction that atomically reads the old pointer and writes NULL. This
    guarantees only one of the two concurrent callers obtains the non-NULL
    pointer and performs the put, the other gets NULL and skips it.
    
    Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/work_items/15880
    Fixes: 058179e72e09 ("drm/i915/gt: Replace hangcheck by heartbeats")
    Cc: <stable@vger.kernel.org> # v5.5+
    Signed-off-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com>
    Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
    Reviewed-by: Andi Shyti <andi.shyti@linux.intel.com>
    Signed-off-by: Andi Shyti <andi.shyti@linux.intel.com>
    Link: https://lore.kernel.org/r/d4c1c14255688dd07cc8044973c4f032a8d1559e.1775038106.git.sebastian.brzezinka@intel.com
    (cherry picked from commit 13238dc0ee4f9ab8dafa2cca7295736191ae2f42)
    Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
drm/scheduler: signal scheduled fence when kill job [+ + +]
Author: Lin.Cao <lincao12@amd.com>
Date:   Thu May 15 10:07:13 2025 +0800

    drm/scheduler: signal scheduled fence when kill job
    
    commit 471db2c2d4f80ee94225a1ef246e4f5011733e50 upstream.
    
    When an entity from application B is killed, drm_sched_entity_kill()
    removes all jobs belonging to that entity through
    drm_sched_entity_kill_jobs_work(). If application A's job depends on a
    scheduled fence from application B's job, and that fence is not properly
    signaled during the killing process, application A's dependency cannot be
    cleared.
    
    This leads to application A hanging indefinitely while waiting for a
    dependency that will never be resolved. Fix this issue by ensuring that
    scheduled fences are properly signaled when an entity is killed, allowing
    dependent applications to continue execution.
    
    Signed-off-by: Lin.Cao <lincao12@amd.com>
    Reviewed-by: Philipp Stanner <phasta@kernel.org>
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Link: https://lore.kernel.org/r/20250515020713.1110476-1-lincao12@amd.com
    [ Modified drm_sched_fence_scheduled(job->s_fence, NULL) to
      drm_sched_fence_scheduled(job->s_fence) for kernel 6.1.y ]
    Signed-off-by: Leon Chen <leonchen.oss@139.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
EDAC/mc: Fix error path ordering in edac_mc_alloc() [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Tue Mar 31 14:16:23 2026 +0200

    EDAC/mc: Fix error path ordering in edac_mc_alloc()
    
    commit 51520e03e70d6c73e33ee7cbe0319767d05764fe upstream.
    
    When the mci->pvt_info allocation in edac_mc_alloc() fails, the error path
    will call put_device() which will end up calling the device's release
    function.
    
    However, the init ordering is wrong such that device_initialize() happens
    *after* the failed allocation and thus the device itself and the release
    function pointer are not initialized yet when they're called:
    
      MCE: In-kernel MCE decoding enabled.
      ------------[ cut here ]------------
      kobject: '(null)': is not initialized, yet kobject_put() is being called.
      WARNING: lib/kobject.c:734 at kobject_put, CPU#22: systemd-udevd
      CPU: 22 UID: 0 PID: 538 Comm: systemd-udevd Not tainted 7.0.0-rc1+ #2 PREEMPT(full)
      RIP: 0010:kobject_put
      Call Trace:
       <TASK>
       edac_mc_alloc+0xbe/0xe0 [edac_core]
       amd64_edac_init+0x7a4/0xff0 [amd64_edac]
       ? __pfx_amd64_edac_init+0x10/0x10 [amd64_edac]
       do_one_initcall
       ...
    
    Reorder the calling sequence so that the device is initialized and thus the
    release function pointer is properly set before it can be used.
    
    This was found by Claude while reviewing another EDAC patch.
    
    Fixes: 0bbb265f7089 ("EDAC/mc: Get rid of silly one-shot struct allocation in edac_mc_alloc()")
    Reported-by: Claude Code:claude-opus-4.5
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Reviewed-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
    Cc: stable@kernel.org
    Link: https://patch.msgid.link/20260331121623.4871-1-bp@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Input: uinput - fix circular locking dependency with ff-core [+ + +]
Author: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
Date:   Tue Apr 7 12:50:31 2026 +0500

    Input: uinput - fix circular locking dependency with ff-core
    
    commit 4cda78d6f8bf2b700529f2fbccb994c3e826d7c2 upstream.
    
    A lockdep circular locking dependency warning can be triggered
    reproducibly when using a force-feedback gamepad with uinput (for
    example, playing ELDEN RING under Wine with a Flydigi Vader 5
    controller):
    
      ff->mutex -> udev->mutex -> input_mutex -> dev->mutex -> ff->mutex
    
    The cycle is caused by four lock acquisition paths:
    
    1. ff upload: input_ff_upload() holds ff->mutex and calls
       uinput_dev_upload_effect() -> uinput_request_submit() ->
       uinput_request_send(), which acquires udev->mutex.
    
    2. device create: uinput_ioctl_handler() holds udev->mutex and calls
       uinput_create_device() -> input_register_device(), which acquires
       input_mutex.
    
    3. device register: input_register_device() holds input_mutex and
       calls kbd_connect() -> input_register_handle(), which acquires
       dev->mutex.
    
    4. evdev release: evdev_release() calls input_flush_device() under
       dev->mutex, which calls input_ff_flush() acquiring ff->mutex.
    
    Fix this by introducing a new state_lock spinlock to protect
    udev->state and udev->dev access in uinput_request_send() instead of
    acquiring udev->mutex.  The function only needs to atomically check
    device state and queue an input event into the ring buffer via
    uinput_dev_event() -- both operations are safe under a spinlock
    (ktime_get_ts64() and wake_up_interruptible() do not sleep).  This
    breaks the ff->mutex -> udev->mutex link since a spinlock is a leaf in
    the lock ordering and cannot form cycles with mutexes.
    
    To keep state transitions visible to uinput_request_send(), protect
    writes to udev->state in uinput_create_device() and
    uinput_destroy_device() with the same state_lock spinlock.
    
    Additionally, move init_completion(&request->done) from
    uinput_request_send() to uinput_request_submit() before
    uinput_request_reserve_slot().  Once the slot is allocated,
    uinput_flush_requests() may call complete() on it at any time from
    the destroy path, so the completion must be initialised before the
    request becomes visible.
    
    Lock ordering after the fix:
    
      ff->mutex -> state_lock (spinlock, leaf)
      udev->mutex -> state_lock (spinlock, leaf)
      udev->mutex -> input_mutex -> dev->mutex -> ff->mutex (no back-edge)
    
    Fixes: ff462551235d ("Input: uinput - switch to the new FF interface")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/all/CABXGCsMoxag+kEwHhb7KqhuyxfmGGd0P=tHZyb1uKE0pLr8Hkg@mail.gmail.com/
    Signed-off-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
    Link: https://patch.msgid.link/20260407075031.38351-1-mikhail.v.gavrilov@gmail.com
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Input: uinput - take event lock when submitting FF request "event" [+ + +]
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Tue Apr 7 22:16:27 2026 -0700

    Input: uinput - take event lock when submitting FF request "event"
    
    commit ff14dafde15c11403fac61367a34fea08926e9ee upstream.
    
    To avoid racing with FF playback events and corrupting device's event
    queue take event_lock spinlock when calling uinput_dev_event() when
    submitting a FF upload or erase "event".
    
    Tested-by: Mikhail Gavrilov <mikhail.v.gavrilov@gmail.com>
    Link: https://patch.msgid.link/adXkf6MWzlB8LA_s@google.com
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
lib/crypto: chacha: Zeroize permuted_state before it leaves scope [+ + +]
Author: Eric Biggers <ebiggers@kernel.org>
Date:   Wed Mar 25 20:29:20 2026 -0700

    lib/crypto: chacha: Zeroize permuted_state before it leaves scope
    
    commit e5046823f8fa3677341b541a25af2fcb99a5b1e0 upstream.
    
    Since the ChaCha permutation is invertible, the local variable
    'permuted_state' is sufficient to compute the original 'state', and thus
    the key, even after the permutation has been done.
    
    While the kernel is quite inconsistent about zeroizing secrets on the
    stack (and some prominent userspace crypto libraries don't bother at all
    since it's not guaranteed to work anyway), the kernel does try to do it
    as a best practice, especially in cases involving the RNG.
    
    Thus, explicitly zeroize 'permuted_state' before it goes out of scope.
    
    Fixes: c08d0e647305 ("crypto: chacha20 - Add a generic ChaCha20 stream cipher implementation")
    Cc: stable@vger.kernel.org
    Acked-by: Ard Biesheuvel <ardb@kernel.org>
    Link: https://lore.kernel.org/r/20260326032920.39408-1-ebiggers@kernel.org
    Signed-off-by: Eric Biggers <ebiggers@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
Linux: Linux 6.1.169 [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sat Apr 18 10:35:59 2026 +0200

    Linux 6.1.169
    
    Link: https://lore.kernel.org/r/20260413155724.820472494@linuxfoundation.org
    Tested-by: Brett A C Sheffield <bacs@librecast.net>
    Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
    Tested-by: Salvatore Bonaccorso <carnil@debian.org>
    Tested-by: Jon Hunter <jonathanh@nvidia.com>
    Tested-by: Pavel Machek (CIP) <pavel@nabladev.com>
    Tested-by: Pavel Machek (CIP) <pavel@nabladev.com>
    Tested-by: Peter Schneider <pschneider1968@googlemail.com>
    Tested-by: Ron Economos <re@w6rz.net>
    Tested-by: Francesco Dolcini <francesco.dolcini@toradex.com>
    Tested-by: Shuah Khan <skhan@linuxfoundation.org>
    Tested-by: Miguel Ojeda <ojeda@kernel.org>
    Tested-by: Mark Brown <broonie@kernel.org>
    Tested-by: Barry K. Nathan <barryn@pobox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
media: uvcvideo: Mark invalid entities with id UVC_INVALID_ENTITY_ID [+ + +]
Author: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Date:   Wed Aug 20 16:08:16 2025 +0000

    media: uvcvideo: Mark invalid entities with id UVC_INVALID_ENTITY_ID
    
    [ Upstream commit 0e2ee70291e64a30fe36960c85294726d34a103e ]
    
    Per UVC 1.1+ specification 3.7.2, units and terminals must have a non-zero
    unique ID.
    
    ```
    Each Unit and Terminal within the video function is assigned a unique
    identification number, the Unit ID (UID) or Terminal ID (TID), contained in
    the bUnitID or bTerminalID field of the descriptor. The value 0x00 is
    reserved for undefined ID,
    ```
    
    If we add a new entity with id 0 or a duplicated ID, it will be marked
    as UVC_INVALID_ENTITY_ID.
    
    In a previous attempt commit 3dd075fe8ebb ("media: uvcvideo: Require
    entities to have a non-zero unique ID"), we ignored all the invalid units,
    this broke a lot of non-compatible cameras. Hopefully we are more lucky
    this time.
    
    This also prevents some syzkaller reproducers from triggering warnings due
    to a chain of entities referring to themselves. In one particular case, an
    Output Unit is connected to an Input Unit, both with the same ID of 1. But
    when looking up for the source ID of the Output Unit, that same entity is
    found instead of the input entity, which leads to such warnings.
    
    In another case, a backward chain was considered finished as the source ID
    was 0. Later on, that entity was found, but its pads were not valid.
    
    Here is a sample stack trace for one of those cases.
    
    [   20.650953] usb 1-1: new high-speed USB device number 2 using dummy_hcd
    [   20.830206] usb 1-1: Using ep0 maxpacket: 8
    [   20.833501] usb 1-1: config 0 descriptor??
    [   21.038518] usb 1-1: string descriptor 0 read error: -71
    [   21.038893] usb 1-1: Found UVC 0.00 device <unnamed> (2833:0201)
    [   21.039299] uvcvideo 1-1:0.0: Entity type for entity Output 1 was not initialized!
    [   21.041583] uvcvideo 1-1:0.0: Entity type for entity Input 1 was not initialized!
    [   21.042218] ------------[ cut here ]------------
    [   21.042536] WARNING: CPU: 0 PID: 9 at drivers/media/mc/mc-entity.c:1147 media_create_pad_link+0x2c4/0x2e0
    [   21.043195] Modules linked in:
    [   21.043535] CPU: 0 UID: 0 PID: 9 Comm: kworker/0:1 Not tainted 6.11.0-rc7-00030-g3480e43aeccf #444
    [   21.044101] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.15.0-1 04/01/2014
    [   21.044639] Workqueue: usb_hub_wq hub_event
    [   21.045100] RIP: 0010:media_create_pad_link+0x2c4/0x2e0
    [   21.045508] Code: fe e8 20 01 00 00 b8 f4 ff ff ff 48 83 c4 30 5b 41 5c 41 5d 41 5e 41 5f 5d c3 cc cc cc cc 0f 0b eb e9 0f 0b eb 0a 0f 0b eb 06 <0f> 0b eb 02 0f 0b b8 ea ff ff ff eb d4 66 2e 0f 1f 84 00 00 00 00
    [   21.046801] RSP: 0018:ffffc9000004b318 EFLAGS: 00010246
    [   21.047227] RAX: ffff888004e5d458 RBX: 0000000000000000 RCX: ffffffff818fccf1
    [   21.047719] RDX: 000000000000007b RSI: 0000000000000000 RDI: ffff888004313290
    [   21.048241] RBP: ffff888004313290 R08: 0001ffffffffffff R09: 0000000000000000
    [   21.048701] R10: 0000000000000013 R11: 0001888004313290 R12: 0000000000000003
    [   21.049138] R13: ffff888004313080 R14: ffff888004313080 R15: 0000000000000000
    [   21.049648] FS:  0000000000000000(0000) GS:ffff88803ec00000(0000) knlGS:0000000000000000
    [   21.050271] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   21.050688] CR2: 0000592cc27635b0 CR3: 000000000431c000 CR4: 0000000000750ef0
    [   21.051136] PKRU: 55555554
    [   21.051331] Call Trace:
    [   21.051480]  <TASK>
    [   21.051611]  ? __warn+0xc4/0x210
    [   21.051861]  ? media_create_pad_link+0x2c4/0x2e0
    [   21.052252]  ? report_bug+0x11b/0x1a0
    [   21.052540]  ? trace_hardirqs_on+0x31/0x40
    [   21.052901]  ? handle_bug+0x3d/0x70
    [   21.053197]  ? exc_invalid_op+0x1a/0x50
    [   21.053511]  ? asm_exc_invalid_op+0x1a/0x20
    [   21.053924]  ? media_create_pad_link+0x91/0x2e0
    [   21.054364]  ? media_create_pad_link+0x2c4/0x2e0
    [   21.054834]  ? media_create_pad_link+0x91/0x2e0
    [   21.055131]  ? _raw_spin_unlock+0x1e/0x40
    [   21.055441]  ? __v4l2_device_register_subdev+0x202/0x210
    [   21.055837]  uvc_mc_register_entities+0x358/0x400
    [   21.056144]  uvc_register_chains+0x1fd/0x290
    [   21.056413]  uvc_probe+0x380e/0x3dc0
    [   21.056676]  ? __lock_acquire+0x5aa/0x26e0
    [   21.056946]  ? find_held_lock+0x33/0xa0
    [   21.057196]  ? kernfs_activate+0x70/0x80
    [   21.057533]  ? usb_match_dynamic_id+0x1b/0x70
    [   21.057811]  ? find_held_lock+0x33/0xa0
    [   21.058047]  ? usb_match_dynamic_id+0x55/0x70
    [   21.058330]  ? lock_release+0x124/0x260
    [   21.058657]  ? usb_match_one_id_intf+0xa2/0x100
    [   21.058997]  usb_probe_interface+0x1ba/0x330
    [   21.059399]  really_probe+0x1ba/0x4c0
    [   21.059662]  __driver_probe_device+0xb2/0x180
    [   21.059944]  driver_probe_device+0x5a/0x100
    [   21.060170]  __device_attach_driver+0xe9/0x160
    [   21.060427]  ? __pfx___device_attach_driver+0x10/0x10
    [   21.060872]  bus_for_each_drv+0xa9/0x100
    [   21.061312]  __device_attach+0xed/0x190
    [   21.061812]  device_initial_probe+0xe/0x20
    [   21.062229]  bus_probe_device+0x4d/0xd0
    [   21.062590]  device_add+0x308/0x590
    [   21.062912]  usb_set_configuration+0x7b6/0xaf0
    [   21.063403]  usb_generic_driver_probe+0x36/0x80
    [   21.063714]  usb_probe_device+0x7b/0x130
    [   21.063936]  really_probe+0x1ba/0x4c0
    [   21.064111]  __driver_probe_device+0xb2/0x180
    [   21.064577]  driver_probe_device+0x5a/0x100
    [   21.065019]  __device_attach_driver+0xe9/0x160
    [   21.065403]  ? __pfx___device_attach_driver+0x10/0x10
    [   21.065820]  bus_for_each_drv+0xa9/0x100
    [   21.066094]  __device_attach+0xed/0x190
    [   21.066535]  device_initial_probe+0xe/0x20
    [   21.066992]  bus_probe_device+0x4d/0xd0
    [   21.067250]  device_add+0x308/0x590
    [   21.067501]  usb_new_device+0x347/0x610
    [   21.067817]  hub_event+0x156b/0x1e30
    [   21.068060]  ? process_scheduled_works+0x48b/0xaf0
    [   21.068337]  process_scheduled_works+0x5a3/0xaf0
    [   21.068668]  worker_thread+0x3cf/0x560
    [   21.068932]  ? kthread+0x109/0x1b0
    [   21.069133]  kthread+0x197/0x1b0
    [   21.069343]  ? __pfx_worker_thread+0x10/0x10
    [   21.069598]  ? __pfx_kthread+0x10/0x10
    [   21.069908]  ret_from_fork+0x32/0x40
    [   21.070169]  ? __pfx_kthread+0x10/0x10
    [   21.070424]  ret_from_fork_asm+0x1a/0x30
    [   21.070737]  </TASK>
    
    Reported-by: syzbot+0584f746fde3d52b4675@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=0584f746fde3d52b4675
    Reported-by: syzbot+dd320d114deb3f5bb79b@syzkaller.appspotmail.com
    Closes: https://syzkaller.appspot.com/bug?extid=dd320d114deb3f5bb79b
    Reported-by: Youngjun Lee <yjjuny.lee@samsung.com>
    Fixes: a3fbc2e6bb05 ("media: mc-entity.c: use WARN_ON, validate link pads")
    Cc: stable@vger.kernel.org
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
    Co-developed-by: Ricardo Ribalda <ribalda@chromium.org>
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Reviewed-by: Hans de Goede <hansg@kernel.org>
    Signed-off-by: Hans de Goede <hansg@kernel.org>
    Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

media: uvcvideo: Use heuristic to find stream entity [+ + +]
Author: Ricardo Ribalda <ribalda@chromium.org>
Date:   Tue Oct 21 10:36:17 2025 +0000

    media: uvcvideo: Use heuristic to find stream entity
    
    [ Upstream commit 758dbc756aad429da11c569c0d067f7fd032bcf7 ]
    
    Some devices, like the Grandstream GUV3100 webcam, have an invalid UVC
    descriptor where multiple entities share the same ID, this is invalid
    and makes it impossible to make a proper entity tree without heuristics.
    
    We have recently introduced a change in the way that we handle invalid
    entities that has caused a regression on broken devices.
    
    Implement a new heuristic to handle these devices properly.
    
    Reported-by: Angel4005 <ooara1337@gmail.com>
    Closes: https://lore.kernel.org/linux-media/CAOzBiVuS7ygUjjhCbyWg-KiNx+HFTYnqH5+GJhd6cYsNLT=DaA@mail.gmail.com/
    Fixes: 0e2ee70291e6 ("media: uvcvideo: Mark invalid entities with id UVC_INVALID_ENTITY_ID")
    Cc: stable@vger.kernel.org
    Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
    Reviewed-by: Hans de Goede <hansg@kernel.org>
    Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
MIPS: Always record SEGBITS in cpu_data.vmbits [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Apr 10 01:52:57 2026 +0100

    MIPS: Always record SEGBITS in cpu_data.vmbits
    
    commit 8374c2cb83b95b3c92f129fd56527225c20a058c upstream.
    
    With a 32-bit kernel running on 64-bit MIPS hardware the hardcoded value
    of `cpu_vmbits' only records the size of compatibility useg and does not
    reflect the size of native xuseg or the complete range of values allowed
    in the VPN2 field of TLB entries.
    
    An upcoming change will need the actual VPN2 value range permitted even
    in 32-bit kernel configurations, so always include the `vmbits' member
    in `struct cpuinfo_mips' and probe for SEGBITS when running on 64-bit
    hardware and resorting to the currently hardcoded value of 31 on 32-bit
    processors.  No functional change for users of `cpu_vmbits'.
    
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

MIPS: mm: Rewrite TLB uniquification for the hidden bit feature [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Apr 10 01:52:59 2026 +0100

    MIPS: mm: Rewrite TLB uniquification for the hidden bit feature
    
    commit 540760b77b8fc49d39d1b2b76196e5ec57711a32 upstream.
    
    Before the introduction of the EHINV feature, which lets software mark
    TLB entries invalid, certain older implementations of the MIPS ISA were
    equipped with an analogous bit, as a vendor extension, which however is
    hidden from software and only ever set at reset, and then any software
    write clears it, making the intended TLB entry valid.
    
    This feature makes it unsafe to read a TLB entry with TLBR, modify the
    page mask, and write the entry back with TLBWI, because this operation
    will implicitly clear the hidden bit and this may create a duplicate
    entry, as with the presence of the hidden bit there is no guarantee all
    the entries across the TLB are unique each.
    
    Usually the firmware has already uniquified TLB entries before handing
    control over, in which case we only need to guarantee at bootstrap no
    clash will happen with the VPN2 values chosen in local_flush_tlb_all().
    
    However with systems such as Mikrotik RB532 we get handed the TLB as at
    reset, with the hidden bit set across the entries and possibly duplicate
    entries present.  This then causes a machine check exception when page
    sizes are reset in r4k_tlb_uniquify() and prevents the system from
    booting.
    
    Rewrite the algorithm used in r4k_tlb_uniquify() then such as to avoid
    the reuse of ASID/VPN values across the TLB.  Get rid of global entries
    first as they may be blocking the entire address space, e.g. 16 256MiB
    pages will exhaust the whole address space of a 32-bit CPU and a single
    big page can exhaust the 32-bit compatibility space on a 64-bit CPU.
    
    Details of the algorithm chosen are given across the code itself.
    
    Fixes: 9f048fa48740 ("MIPS: mm: Prevent a TLB shutdown on initial uniquification")
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Cc: stable@vger.kernel.org # v6.18+
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

MIPS: mm: Suppress TLB uniquification on EHINV hardware [+ + +]
Author: Maciej W. Rozycki <macro@orcam.me.uk>
Date:   Fri Apr 10 01:52:58 2026 +0100

    MIPS: mm: Suppress TLB uniquification on EHINV hardware
    
    commit 74283cfe216392c7b776ebf6045b5b15ed9dffcd upstream.
    
    Hardware that supports the EHINV feature, mandatory for R6 ISA and FTLB
    implementation, lets software mark TLB entries invalid, which eliminates
    the need to ensure no duplicate matching entries are ever created.  This
    feature is already used by local_flush_tlb_all(), via the UNIQUE_ENTRYHI
    macro, making the preceding call to r4k_tlb_uniquify() superfluous.
    
    The next change will also modify uniquification code such that it'll
    become incompatible with the FTLB and MMID features, as well as MIPSr6
    CPUs that do not implement 4KiB pages.
    
    Therefore prevent r4k_tlb_uniquify() from being used on EHINV hardware,
    as denoted by `cpu_has_tlbinv'.
    
    Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>

 
mmc: vub300: fix NULL-deref on disconnect [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Mar 27 11:52:05 2026 +0100

    mmc: vub300: fix NULL-deref on disconnect
    
    commit dff34ef879c5e73298443956a8b391311ba78d57 upstream.
    
    Make sure to deregister the controller before dropping the reference to
    the driver data on disconnect to avoid NULL-pointer dereferences or
    use-after-free.
    
    Fixes: 88095e7b473a ("mmc: Add new VUB300 USB-to-SD/SDIO/MMC driver")
    Cc: stable@vger.kernel.org # 3.0+
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
mptcp: fix slab-use-after-free in __inet_lookup_established [+ + +]
Author: Jiayuan Chen <jiayuan.chen@linux.dev>
Date:   Mon Apr 6 11:15:10 2026 +0800

    mptcp: fix slab-use-after-free in __inet_lookup_established
    
    commit 9b55b253907e7431210483519c5ad711a37dafa1 upstream.
    
    The ehash table lookups are lockless and rely on
    SLAB_TYPESAFE_BY_RCU to guarantee socket memory stability
    during RCU read-side critical sections. Both tcp_prot and
    tcpv6_prot have their slab caches created with this flag
    via proto_register().
    
    However, MPTCP's mptcp_subflow_init() copies tcpv6_prot into
    tcpv6_prot_override during inet_init() (fs_initcall, level 5),
    before inet6_init() (module_init/device_initcall, level 6) has
    called proto_register(&tcpv6_prot). At that point,
    tcpv6_prot.slab is still NULL, so tcpv6_prot_override.slab
    remains NULL permanently.
    
    This causes MPTCP v6 subflow child sockets to be allocated via
    kmalloc (falling into kmalloc-4k) instead of the TCPv6 slab
    cache. The kmalloc-4k cache lacks SLAB_TYPESAFE_BY_RCU, so
    when these sockets are freed without SOCK_RCU_FREE (which is
    cleared for child sockets by design), the memory can be
    immediately reused. Concurrent ehash lookups under
    rcu_read_lock can then access freed memory, triggering a
    slab-use-after-free in __inet_lookup_established.
    
    Fix this by splitting the IPv6-specific initialization out of
    mptcp_subflow_init() into a new mptcp_subflow_v6_init(), called
    from mptcp_proto_v6_init() before protocol registration. This
    ensures tcpv6_prot_override.slab correctly inherits the
    SLAB_TYPESAFE_BY_RCU slab cache.
    
    Fixes: b19bc2945b40 ("mptcp: implement delegated actions")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
    Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260406031512.189159-1-jiayuan.chen@linux.dev
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/mlx5: Update the list of the PCI supported devices [+ + +]
Author: Michael Guralnik <michaelgur@nvidia.com>
Date:   Fri Apr 3 12:17:56 2026 +0300

    net/mlx5: Update the list of the PCI supported devices
    
    commit a9d4f4f6e65e0bf9bbddedecc84d67249991979c upstream.
    
    Add the upcoming ConnectX-10 NVLink-C2C device ID to the table of
    supported PCI device IDs.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Michael Guralnik <michaelgur@nvidia.com>
    Reviewed-by: Patrisious Haddad <phaddad@nvidia.com>
    Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260403091756.139583-1-tariqt@nvidia.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net/tls: fix use-after-free in -EBUSY error path of tls_do_encryption [+ + +]
Author: Muhammad Alifa Ramdhan <ramdhan@starlabs.sg>
Date:   Fri Apr 3 09:36:17 2026 +0800

    net/tls: fix use-after-free in -EBUSY error path of tls_do_encryption
    
    commit a9b8b18364fffce4c451e6f6fd218fa4ab646705 upstream.
    
    The -EBUSY handling in tls_do_encryption(), introduced by commit
    859054147318 ("net: tls: handle backlogging of crypto requests"), has
    a use-after-free due to double cleanup of encrypt_pending and the
    scatterlist entry.
    
    When crypto_aead_encrypt() returns -EBUSY, the request is enqueued to
    the cryptd backlog and the async callback tls_encrypt_done() will be
    invoked upon completion. That callback unconditionally restores the
    scatterlist entry (sge->offset, sge->length) and decrements
    ctx->encrypt_pending. However, if tls_encrypt_async_wait() returns an
    error, the synchronous error path in tls_do_encryption() performs the
    same cleanup again, double-decrementing encrypt_pending and
    double-restoring the scatterlist.
    
    The double-decrement corrupts the encrypt_pending sentinel (initialized
    to 1), making tls_encrypt_async_wait() permanently skip the wait for
    pending async callbacks. A subsequent sendmsg can then free the
    tls_rec via bpf_exec_tx_verdict() while a cryptd callback is still
    pending, resulting in a use-after-free when the callback fires on the
    freed record.
    
    Fix this by skipping the synchronous cleanup when the -EBUSY async
    wait returns an error, since the callback has already handled
    encrypt_pending and sge restoration.
    
    Fixes: 859054147318 ("net: tls: handle backlogging of crypto requests")
    Cc: stable@vger.kernel.org
    Signed-off-by: Muhammad Alifa Ramdhan <ramdhan@starlabs.sg>
    Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
    Link: https://patch.msgid.link/20260403013617.2838875-1-ramdhan@starlabs.sg
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
net: altera-tse: fix skb leak on DMA mapping error in tse_start_xmit() [+ + +]
Author: David Carlier <devnexen@gmail.com>
Date:   Wed Apr 1 22:12:18 2026 +0100

    net: altera-tse: fix skb leak on DMA mapping error in tse_start_xmit()
    
    commit 6dede3967619b5944003227a5d09fdc21ed57d10 upstream.
    
    When dma_map_single() fails in tse_start_xmit(), the function returns
    NETDEV_TX_OK without freeing the skb. Since NETDEV_TX_OK tells the
    stack the packet was consumed, the skb is never freed, leaking memory
    on every DMA mapping failure.
    
    Add dev_kfree_skb_any() before returning to properly free the skb.
    
    Fixes: bbd2190ce96d ("Altera TSE: Add main and header file for Altera Ethernet Driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: David Carlier <devnexen@gmail.com>
    Link: https://patch.msgid.link/20260401211218.279185-1-devnexen@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: qualcomm: qca_uart: report the consumed byte on RX skb allocation failure [+ + +]
Author: Pengpeng Hou <pengpeng@iscas.ac.cn>
Date:   Thu Apr 2 15:12:07 2026 +0800

    net: qualcomm: qca_uart: report the consumed byte on RX skb allocation failure
    
    commit b76254c55dc8f23edc089027dd3f8792554c69fb upstream.
    
    qca_tty_receive() consumes each input byte before checking whether a
    completed frame needs a fresh receive skb. When the current byte completes
    a frame, the driver delivers that frame and then allocates a new skb for
    the next one.
    
    If that allocation fails, the current code returns i even though data[i]
    has already been consumed and may already have completed the delivered
    frame. Since serdev interprets the return value as the number of accepted
    bytes, this under-reports progress by one byte and can replay the final
    byte of the completed frame into a fresh parser state on the next call.
    
    Return i + 1 in that failure path so the accepted-byte count matches the
    actual receive-state progress.
    
    Fixes: dfc768fbe618 ("net: qualcomm: add QCA7000 UART driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
    Reviewed-by: Stefan Wahren <wahrenst@gmx.net>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/20260402071207.4036-1-pengpeng@iscas.ac.cn
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: rfkill: prevent unlimited numbers of rfkill events from being created [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sun Apr 12 08:55:17 2026 -0400

    net: rfkill: prevent unlimited numbers of rfkill events from being created
    
    [ Upstream commit ea245d78dec594372e27d8c79616baf49e98a4a1 ]
    
    Userspace can create an unlimited number of rfkill events if the system
    is so configured, while not consuming them from the rfkill file
    descriptor, causing a potential out of memory situation.  Prevent this
    from bounding the number of pending rfkill events at a "large" number
    (i.e. 1000) to prevent abuses like this.
    
    Cc: Johannes Berg <johannes@sipsolutions.net>
    Reported-by: Yuan Tan <yuantan098@gmail.com>
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Reported-by: Xin Liu <bird@lzu.edu.cn>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/2026033013-disfigure-scroll-e25e@gregkh
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: rfkill: reduce data->mtx scope in rfkill_fop_open [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Sun Apr 12 08:55:16 2026 -0400

    net: rfkill: reduce data->mtx scope in rfkill_fop_open
    
    [ Upstream commit f2ac54ebf85615a6d78f5eb213a8bbeeb17ebe5d ]
    
    In syzbot runs, lockdep reports that there's a (potential)
    deadlock here of data->mtx being locked recursively. This
    isn't really a deadlock since they are different instances,
    but lockdep cannot know, and teaching it would be far more
    difficult than other fixes.
    
    At the same time we don't even really _need_ the mutex to
    be locked in rfkill_fop_open(), since we're modifying only
    a completely fresh instance of 'data' (struct rfkill_data)
    that's not yet added to the global list.
    
    However, to avoid any reordering etc. within the globally
    locked section, and to make the code look more symmetric,
    we should still lock the data->events list manipulation,
    but also need to lock _only_ that. So do that.
    
    Reported-by: syzbot+509238e523e032442b80@syzkaller.appspotmail.com
    Fixes: 2c3dfba4cf84 ("rfkill: sync before userspace visibility/changes")
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: ea245d78dec5 ("net: rfkill: prevent unlimited numbers of rfkill events from being created")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

net: stmmac: fix integer underflow in chain mode [+ + +]
Author: Tyllis Xu <livelycarpet87@gmail.com>
Date:   Tue Mar 31 23:47:07 2026 -0500

    net: stmmac: fix integer underflow in chain mode
    
    commit 51f4e090b9f87b40c21b6daadb5c06e6c0a07b67 upstream.
    
    The jumbo_frm() chain-mode implementation unconditionally computes
    
        len = nopaged_len - bmax;
    
    where nopaged_len = skb_headlen(skb) (linear bytes only) and bmax is
    BUF_SIZE_8KiB or BUF_SIZE_2KiB.  However, the caller stmmac_xmit()
    decides to invoke jumbo_frm() based on skb->len (total length including
    page fragments):
    
        is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc);
    
    When a packet has a small linear portion (nopaged_len <= bmax) but a
    large total length due to page fragments (skb->len > bmax), the
    subtraction wraps as an unsigned integer, producing a huge len value
    (~0xFFFFxxxx).  This causes the while (len != 0) loop to execute
    hundreds of thousands of iterations, passing skb->data + bmax * i
    pointers far beyond the skb buffer to dma_map_single().  On IOMMU-less
    SoCs (the typical deployment for stmmac), this maps arbitrary kernel
    memory to the DMA engine, constituting a kernel memory disclosure and
    potential memory corruption from hardware.
    
    Fix this by introducing a buf_len local variable clamped to
    min(nopaged_len, bmax).  Computing len = nopaged_len - buf_len is then
    always safe: it is zero when the linear portion fits within a single
    descriptor, causing the while (len != 0) loop to be skipped naturally,
    and the fragment loop in stmmac_xmit() handles page fragments afterward.
    
    Fixes: 286a83721720 ("stmmac: add CHAINED descriptor mode support (V4)")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tyllis Xu <LivelyCarpet87@gmail.com>
    Link: https://patch.msgid.link/20260401044708.1386919-1-LivelyCarpet87@gmail.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
netfilter: nft_ct: fix use-after-free in timeout object destroy [+ + +]
Author: Tuan Do <tuan@calif.io>
Date:   Fri Apr 3 00:33:17 2026 -0700

    netfilter: nft_ct: fix use-after-free in timeout object destroy
    
    commit f8dca15a1b190787bbd03285304b569631160eda upstream.
    
    nft_ct_timeout_obj_destroy() frees the timeout object with kfree()
    immediately after nf_ct_untimeout(), without waiting for an RCU grace
    period. Concurrent packet processing on other CPUs may still hold
    RCU-protected references to the timeout object obtained via
    rcu_dereference() in nf_ct_timeout_data().
    
    Add an rcu_head to struct nf_ct_timeout and use kfree_rcu() to defer
    freeing until after an RCU grace period, matching the approach already
    used in nfnetlink_cttimeout.c.
    
    KASAN report:
     BUG: KASAN: slab-use-after-free in nf_conntrack_tcp_packet+0x1381/0x29d0
     Read of size 4 at addr ffff8881035fe19c by task exploit/80
    
     Call Trace:
      nf_conntrack_tcp_packet+0x1381/0x29d0
      nf_conntrack_in+0x612/0x8b0
      nf_hook_slow+0x70/0x100
      __ip_local_out+0x1b2/0x210
      tcp_sendmsg_locked+0x722/0x1580
      __sys_sendto+0x2d8/0x320
    
     Allocated by task 75:
      nft_ct_timeout_obj_init+0xf6/0x290
      nft_obj_init+0x107/0x1b0
      nf_tables_newobj+0x680/0x9c0
      nfnetlink_rcv_batch+0xc29/0xe00
    
     Freed by task 26:
      nft_obj_destroy+0x3f/0xa0
      nf_tables_trans_destroy_work+0x51c/0x5c0
      process_one_work+0x2c4/0x5a0
    
    Fixes: 7e0b2b57f01d ("netfilter: nft_ct: add ct timeout support")
    Cc: stable@vger.kernel.org
    Signed-off-by: Tuan Do <tuan@calif.io>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

netfilter: nft_set_pipapo: do not rely on ZERO_SIZE_PTR [+ + +]
Author: Florian Westphal <fw@strlen.de>
Date:   Mon Apr 13 04:32:47 2026 +0000

    netfilter: nft_set_pipapo: do not rely on ZERO_SIZE_PTR
    
    commit 07ace0bbe03b3d8e85869af1dec5e4087b1d57b8 upstream
    
    pipapo relies on kmalloc(0) returning ZERO_SIZE_PTR (i.e., not NULL
    but pointer is invalid).
    
    Rework this to not call slab allocator when we'd request a 0-byte
    allocation.
    
    Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
    Signed-off-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Mukul Sikka <mukul.sikka@broadcom.com>
    Signed-off-by: Brennan Lamoreaux <brennan.lamoreaux@broadcom.com>
    [Keerthana: In older stable branches (v6.6 and earlier), the allocation logic in
    pipapo_clone() still relies on `src->rules` rather than `src->rules_alloc`
    (introduced in v6.9 via 9f439bd6ef4f). Consequently, the previously
    backported INT_MAX clamping check uses `src->rules`. This patch correctly
    moves that `src->rules > (INT_MAX / ...)` check inside the new
    `if (src->rules > 0)` block]
    Signed-off-by: Keerthana K <keerthana.kalyanasundaram@broadcom.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
nfc: pn533: allocate rx skb before consuming bytes [+ + +]
Author: Pengpeng Hou <pengpeng@iscas.ac.cn>
Date:   Sun Apr 5 08:40:00 2026 +0800

    nfc: pn533: allocate rx skb before consuming bytes
    
    commit c71ba669b570c7b3f86ec875be222ea11dacb352 upstream.
    
    pn532_receive_buf() reports the number of accepted bytes to the serdev
    core. The current code consumes bytes into recv_skb and may already hand
    a complete frame to pn533_recv_frame() before allocating a fresh receive
    buffer.
    
    If that alloc_skb() fails, the callback returns 0 even though it has
    already consumed bytes, and it leaves recv_skb as NULL for the next
    receive callback. That breaks the receive_buf() accounting contract and
    can also lead to a NULL dereference on the next skb_put_u8().
    
    Allocate the receive skb lazily before consuming the next byte instead.
    If allocation fails, return the number of bytes already accepted.
    
    Fixes: c656aa4c27b1 ("nfc: pn533: add UART phy driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
    Link: https://patch.msgid.link/20260405094003.3-pn533-v2-pengpeng@iscas.ac.cn
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "ACPI: EC: Evaluate orphan _REG under EC device" [+ + +]
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Sat Apr 11 21:02:28 2026 -0400

    Revert "ACPI: EC: Evaluate orphan _REG under EC device"
    
    [ Upstream commit 779bac9994452f6a894524f70c00cfb0cd4b6364 ]
    
    This reverts commit 0e6b6dedf168 ("Revert "ACPI: EC: Evaluate orphan
    _REG under EC device") because the problem addressed by it will be
    addressed differently in what follows.
    
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: Hans de Goede <hdegoede@redhat.com>
    Cc: All applicable <stable@vger.kernel.org>
    Link: https://patch.msgid.link/3236716.5fSG56mABF@rjwysocki.net
    Stable-dep-of: 71bf41b8e913 ("ACPI: EC: Evaluate _REG outside the EC scope more carefully")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "mptcp: add needs_id for netlink appending addr" [+ + +]
Author: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Date:   Sun Apr 12 16:02:51 2026 -0400

    Revert "mptcp: add needs_id for netlink appending addr"
    
    [ Upstream commit 8e2760eaab778494fc1fa257031e0e1799647f46 ]
    
    This commit was originally adding the ability to add MPTCP endpoints
    with ID 0 by accident. The in-kernel PM, handling MPTCP endpoints at the
    net namespace level, is not supposed to handle endpoints with such ID,
    because this ID 0 is reserved to the initial subflow, as mentioned in
    the MPTCPv1 protocol [1], a per-connection setting.
    
    Note that 'ip mptcp endpoint add id 0' stops early with an error, but
    other tools might still request the in-kernel PM to create MPTCP
    endpoints with this restricted ID 0.
    
    In other words, it was wrong to call the mptcp_pm_has_addr_attr_id
    helper to check whether the address ID attribute is set: if it was set
    to 0, a new MPTCP endpoint would be created with ID 0, which is not
    expected, and might cause various issues later.
    
    Fixes: 584f38942626 ("mptcp: add needs_id for netlink appending addr")
    Cc: stable@vger.kernel.org
    Link: https://datatracker.ietf.org/doc/html/rfc8684#section-3.2-9 [1]
    Reviewed-by: Geliang Tang <geliang@kernel.org>
    Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
    Link: https://patch.msgid.link/20260407-net-mptcp-revert-pm-needs-id-v2-1-7a25cbc324f8@kernel.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ applied changes to net/mptcp/pm_netlink.c instead of renamed net/mptcp/pm_kernel.c ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
Revert "PCI: Enable ACS after configuring IOMMU for OF platforms" [+ + +]
Author: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Date:   Tue Mar 31 14:44:55 2026 +0530

    Revert "PCI: Enable ACS after configuring IOMMU for OF platforms"
    
    This reverts commit 5d57164c0ab0ac5c99eca49c577994bfbca70a2a which is
    commit c41e2fb67e26b04d919257875fa954aa5f6e392e upstream.
    
    The original commit attempted to enable ACS in pci_dma_configure() prior
    to IOMMU group assignment in iommu_init_device() to fix the ACS enablement
    issue for OF platforms. But that assumption doesn't hold true for kernel
    versions prior to v6.15, because on these older kernels,
    pci_dma_configure() is called *after* iommu_init_device(). So the IOMMU
    groups are already created before the ACS gets enabled. This causes the
    devices that should have been split into separate groups by ACS, getting
    merged into one group, thereby breaking the IOMMU isolation as reported on
    the AMD machines.
    
    So revert the offending commit to restore the IOMMU group assignment on
    those affected machines. It should be noted that ACS has never really
    worked on kernel versions prior to v6.15, so the revert doesn't make any
    difference for OF platforms.
    
    Reported-by: John Hancock <john@kernel.doghat.io>
    Reported-by: bjorn.forsman@gmail.com
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=221234
    Fixes: b20b659c2c6a ("PCI: Enable ACS after configuring IOMMU for OF platforms")
    Cc: Linux kernel regressions list <regressions@lists.linux.dev>
    Link: https://lore.kernel.org/regressions/2c30f181-ffc6-4d63-a64e-763cf4528f48@leemhuis.info
    Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rfkill: sync before userspace visibility/changes [+ + +]
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Sun Apr 12 08:55:15 2026 -0400

    rfkill: sync before userspace visibility/changes
    
    [ Upstream commit 2c3dfba4cf84ac4f306cc6653b37b6dd6859ae9d ]
    
    If userspace quickly opens /dev/rfkill after a new
    instance was created, it might see the old state of
    the instance from before the sync work runs and may
    even _change_ the state, only to have the sync work
    change it again.
    
    Fix this by doing the sync inline where needed, not
    just for /dev/rfkill but also for sysfs.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: ea245d78dec5 ("net: rfkill: prevent unlimited numbers of rfkill events from being created")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rfkill: Use sysfs_emit() to instead of sprintf() [+ + +]
Author: Bo Liu <liubo03@inspur.com>
Date:   Sun Apr 12 08:55:14 2026 -0400

    rfkill: Use sysfs_emit() to instead of sprintf()
    
    [ Upstream commit 796703baead0c2862f7f2ebb9b177590af533035 ]
    
    Follow the advice of the Documentation/filesystems/sysfs.rst and show()
    should only use sysfs_emit() or sysfs_emit_at() when formatting the
    value to be returned to user space.
    
    Signed-off-by: Bo Liu <liubo03@inspur.com>
    Reviewed-by: Simon Horman <simon.horman@corigine.com>
    Link: https://lore.kernel.org/r/20230206081641.3193-1-liubo03@inspur.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Stable-dep-of: ea245d78dec5 ("net: rfkill: prevent unlimited numbers of rfkill events from being created")
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
rxrpc: Fix key/keyring checks in setsockopt(RXRPC_SECURITY_KEY/KEYRING) [+ + +]
Author: David Howells <dhowells@redhat.com>
Date:   Wed Apr 8 13:12:43 2026 +0100

    rxrpc: Fix key/keyring checks in setsockopt(RXRPC_SECURITY_KEY/KEYRING)
    
    commit 2afd86ccbb2082a3c4258aea8c07e5bb6267bc2f upstream.
    
    An AF_RXRPC socket can be both client and server at the same time.  When
    sending new calls (ie. it's acting as a client), it uses rx->key to set the
    security, and when accepting incoming calls (ie. it's acting as a server),
    it uses rx->securities.
    
    setsockopt(RXRPC_SECURITY_KEY) sets rx->key to point to an rxrpc-type key
    and setsockopt(RXRPC_SECURITY_KEYRING) sets rx->securities to point to a
    keyring of rxrpc_s-type keys.
    
    Now, it should be possible to use both rx->key and rx->securities on the
    same socket - but for userspace AF_RXRPC sockets rxrpc_setsockopt()
    prevents that.
    
    Fix this by:
    
     (1) Remove the incorrect check rxrpc_setsockopt(RXRPC_SECURITY_KEYRING)
         makes on rx->key.
    
     (2) Move the check that rxrpc_setsockopt(RXRPC_SECURITY_KEY) makes on
         rx->key down into rxrpc_request_key().
    
     (3) Remove rxrpc_request_key()'s check on rx->securities.
    
    This (in combination with a previous patch) pushes the checks down into the
    functions that set those pointers and removes the cross-checks that prevent
    both key and keyring being set.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Closes: https://sashiko.dev/#/patchset/20260401105614.1696001-10-dhowells@redhat.com
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Anderson Nascimento <anderson@allelesecurity.com>
    cc: Luxiao Xu <rakukuip@gmail.com>
    cc: Yuan Tan <yuantan098@gmail.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260408121252.2249051-16-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

rxrpc: fix reference count leak in rxrpc_server_keyring() [+ + +]
Author: Luxiao Xu <rakukuip@gmail.com>
Date:   Wed Apr 8 13:12:42 2026 +0100

    rxrpc: fix reference count leak in rxrpc_server_keyring()
    
    commit f125846ee79fcae537a964ce66494e96fa54a6de upstream.
    
    This patch fixes a reference count leak in rxrpc_server_keyring()
    by checking if rx->securities is already set.
    
    Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
    Reported-by: Yifan Wu <yifanwucs@gmail.com>
    Reported-by: Juefei Pu <tomapufckgml@gmail.com>
    Co-developed-by: Yuan Tan <yuantan098@gmail.com>
    Signed-off-by: Yuan Tan <yuantan098@gmail.com>
    Suggested-by: Xin Liu <bird@lzu.edu.cn>
    Tested-by: Ren Wei <enjou1224z@gmail.com>
    Signed-off-by: Luxiao Xu <rakukuip@gmail.com>
    Signed-off-by: Ren Wei <n05ec@lzu.edu.cn>
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Marc Dionne <marc.dionne@auristor.com>
    cc: Simon Horman <horms@kernel.org>
    cc: linux-afs@lists.infradead.org
    cc: stable@kernel.org
    Link: https://patch.msgid.link/20260408121252.2249051-15-dhowells@redhat.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
seg6: separate dst_cache for input and output paths in seg6 lwtunnel [+ + +]
Author: Andrea Mayer <andrea.mayer@uniroma2.it>
Date:   Sun Apr 12 16:02:48 2026 -0400

    seg6: separate dst_cache for input and output paths in seg6 lwtunnel
    
    [ Upstream commit c3812651b522fe8437ebb7063b75ddb95b571643 ]
    
    The seg6 lwtunnel uses a single dst_cache per encap route, shared
    between seg6_input_core() and seg6_output_core(). These two paths
    can perform the post-encap SID lookup in different routing contexts
    (e.g., ip rules matching on the ingress interface, or VRF table
    separation). Whichever path runs first populates the cache, and the
    other reuses it blindly, bypassing its own lookup.
    
    Fix this by splitting the cache into cache_input and cache_output,
    so each path maintains its own cached dst independently.
    
    Fixes: 6c8702c60b88 ("ipv6: sr: add support for SRH encapsulation and injection with lwtunnels")
    Cc: stable@vger.kernel.org
    Signed-off-by: Andrea Mayer <andrea.mayer@uniroma2.it>
    Reviewed-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Reviewed-by: Justin Iurman <justin.iurman@gmail.com>
    Link: https://patch.msgid.link/20260404004405.4057-2-andrea.mayer@uniroma2.it
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    [ added missing dst reference loop guard in seg6_output_core() ]
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
tipc: fix bc_ackers underflow on duplicate GRP_ACK_MSG [+ + +]
Author: Oleh Konko <security@1seal.org>
Date:   Thu Apr 2 09:48:57 2026 +0000

    tipc: fix bc_ackers underflow on duplicate GRP_ACK_MSG
    
    commit 48a5fe38772b6f039522469ee6131a67838221a8 upstream.
    
    The GRP_ACK_MSG handler in tipc_group_proto_rcv() currently decrements
    bc_ackers on every inbound group ACK, even when the same member has
    already acknowledged the current broadcast round.
    
    Because bc_ackers is a u16, a duplicate ACK received after the last
    legitimate ACK wraps the counter to 65535. Once wrapped,
    tipc_group_bc_cong() keeps reporting congestion and later group
    broadcasts on the affected socket stay blocked until the group is
    recreated.
    
    Fix this by ignoring duplicate or stale ACKs before touching bc_acked or
    bc_ackers. This makes repeated GRP_ACK_MSG handling idempotent and
    prevents the underflow path.
    
    Fixes: 2f487712b893 ("tipc: guarantee that group broadcast doesn't bypass group unicast")
    Cc: stable@vger.kernel.org
    Signed-off-by: Oleh Konko <security@1seal.org>
    Reviewed-by: Tung Nguyen <tung.quang.nguyen@est.tech>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Link: https://patch.msgid.link/41a4833f368641218e444fdcff822039.security@1seal.org
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
usb: gadget: f_hid: move list and spinlock inits from bind to alloc [+ + +]
Author: Michael Zimmermann <sigmaepsilon92@gmail.com>
Date:   Sat Apr 11 21:47:15 2026 -0400

    usb: gadget: f_hid: move list and spinlock inits from bind to alloc
    
    [ Upstream commit 4e0a88254ad59f6c53a34bf5fa241884ec09e8b2 ]
    
    There was an issue when you did the following:
    - setup and bind an hid gadget
    - open /dev/hidg0
    - use the resulting fd in EPOLL_CTL_ADD
    - unbind the UDC
    - bind the UDC
    - use the fd in EPOLL_CTL_DEL
    
    When CONFIG_DEBUG_LIST was enabled, a list_del corruption was reported
    within remove_wait_queue (via ep_remove_wait_queue). After some
    debugging I found out that the queues, which f_hid registers via
    poll_wait were the problem. These were initialized using
    init_waitqueue_head inside hidg_bind. So effectively, the bind function
    re-initialized the queues while there were still items in them.
    
    The solution is to move the initialization from hidg_bind to hidg_alloc
    to extend their lifetimes to the lifetime of the function instance.
    
    Additionally, I found many other possibly problematic init calls in the
    bind function, which I moved as well.
    
    Signed-off-by: Michael Zimmermann <sigmaepsilon92@gmail.com>
    Cc: stable <stable@kernel.org>
    Link: https://patch.msgid.link/20260331184844.2388761-1-sigmaepsilon92@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

usb: gadget: u_ether: Fix race between gether_disconnect and eth_stop [+ + +]
Author: Kuen-Han Tsai <khtsai@google.com>
Date:   Sat Apr 11 10:11:18 2026 -0400

    usb: gadget: u_ether: Fix race between gether_disconnect and eth_stop
    
    [ Upstream commit e1eabb072c75681f78312c484ccfffb7430f206e ]
    
    A race condition between gether_disconnect() and eth_stop() leads to a
    NULL pointer dereference. Specifically, if eth_stop() is triggered
    concurrently while gether_disconnect() is tearing down the endpoints,
    eth_stop() attempts to access the cleared endpoint descriptor, causing
    the following NPE:
    
      Unable to handle kernel NULL pointer dereference
      Call trace:
       __dwc3_gadget_ep_enable+0x60/0x788
       dwc3_gadget_ep_enable+0x70/0xe4
       usb_ep_enable+0x60/0x15c
       eth_stop+0xb8/0x108
    
    Because eth_stop() crashes while holding the dev->lock, the thread
    running gether_disconnect() fails to acquire the same lock and spins
    forever, resulting in a hardlockup:
    
      Core - Debugging Information for Hardlockup core(7)
      Call trace:
       queued_spin_lock_slowpath+0x94/0x488
       _raw_spin_lock+0x64/0x6c
       gether_disconnect+0x19c/0x1e8
       ncm_set_alt+0x68/0x1a0
       composite_setup+0x6a0/0xc50
    
    The root cause is that the clearing of dev->port_usb in
    gether_disconnect() is delayed until the end of the function.
    
    Move the clearing of dev->port_usb to the very beginning of
    gether_disconnect() while holding dev->lock. This cuts off the link
    immediately, ensuring eth_stop() will see dev->port_usb as NULL and
    safely bail out.
    
    Fixes: 2b3d942c4878 ("usb ethernet gadget: split out network core")
    Cc: stable <stable@kernel.org>
    Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
    Link: https://patch.msgid.link/20260311-gether-disconnect-npe-v1-1-454966adf7c7@google.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
wifi: brcmsmac: Fix dma_free_coherent() size [+ + +]
Author: Thomas Fourier <fourier.thomas@gmail.com>
Date:   Wed Feb 18 14:07:37 2026 +0100

    wifi: brcmsmac: Fix dma_free_coherent() size
    
    commit 12cd7632757a54ce586e36040210b1a738a0fc53 upstream.
    
    dma_alloc_consistent() may change the size to align it. The new size is
    saved in alloced.
    
    Change the free size to match the allocation size.
    
    Fixes: 5b435de0d786 ("net: wireless: add brcm80211 drivers")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Thomas Fourier <fourier.thomas@gmail.com>
    Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
    Link: https://patch.msgid.link/20260218130741.46566-3-fourier.thomas@gmail.com
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

wifi: rt2x00usb: fix devres lifetime [+ + +]
Author: Johan Hovold <johan@kernel.org>
Date:   Fri Mar 27 12:32:19 2026 +0100

    wifi: rt2x00usb: fix devres lifetime
    
    commit 25369b22223d1c56e42a0cd4ac9137349d5a898e upstream.
    
    USB drivers bind to USB interfaces and any device managed resources
    should have their lifetime tied to the interface rather than parent USB
    device. This avoids issues like memory leaks when drivers are unbound
    without their devices being physically disconnected (e.g. on probe
    deferral or configuration changes).
    
    Fix the USB anchor lifetime so that it is released on driver unbind.
    
    Fixes: 8b4c0009313f ("rt2x00usb: Use usb anchor to manage URB")
    Cc: stable@vger.kernel.org      # 4.7
    Cc: Vishal Thanki <vishalthanki@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Stanislaw Gruszka <stf_xl@wp.pl>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Link: https://patch.msgid.link/20260327113219.1313748-1-johan@kernel.org
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
x86/CPU: Fix FPDSS on Zen1 [+ + +]
Author: Borislav Petkov (AMD) <bp@alien8.de>
Date:   Tue Apr 7 11:40:03 2026 +0200

    x86/CPU: Fix FPDSS on Zen1
    
    commit e55d98e7756135f32150b9b8f75d580d0d4b2dd3 upstream.
    
    Zen1's hardware divider can leave, under certain circumstances, partial
    results from previous operations.  Those results can be leaked by
    another, attacker thread.
    
    Fix that with a chicken bit.
    
    Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfrm: clear trailing padding in build_polexpire() [+ + +]
Author: Yasuaki Torimaru <yasuakitorimaru@gmail.com>
Date:   Thu Mar 26 14:58:00 2026 +0900

    xfrm: clear trailing padding in build_polexpire()
    
    commit 71a98248c63c535eaa4d4c22f099b68d902006d0 upstream.
    
    build_expire() clears the trailing padding bytes of struct
    xfrm_user_expire after setting the hard field via memset_after(),
    but the analogous function build_polexpire() does not do this for
    struct xfrm_user_polexpire.
    
    The padding bytes after the __u8 hard field are left
    uninitialized from the heap allocation, and are then sent to
    userspace via netlink multicast to XFRMNLGRP_EXPIRE listeners,
    leaking kernel heap memory contents.
    
    Add the missing memset_after() call, matching build_expire().
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable@vger.kernel.org
    Signed-off-by: Yasuaki Torimaru <yasuakitorimaru@gmail.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Reviewed-by: Breno Leitao <leitao@debian.org>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

 
xfrm_user: fix info leak in build_report() [+ + +]
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Apr 6 17:34:22 2026 +0200

    xfrm_user: fix info leak in build_report()
    
    commit d10119968d0e1f2b669604baf2a8b5fdb72fa6b4 upstream.
    
    struct xfrm_user_report is a __u8 proto field followed by a struct
    xfrm_selector which means there is three "empty" bytes of padding, but
    the padding is never zeroed before copying to userspace.  Fix that up by
    zeroing the structure before setting individual member variables.
    
    Cc: stable <stable@kernel.org>
    Cc: Steffen Klassert <steffen.klassert@secunet.com>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: Eric Dumazet <edumazet@google.com>
    Cc: Jakub Kicinski <kuba@kernel.org>
    Cc: Paolo Abeni <pabeni@redhat.com>
    Cc: Simon Horman <horms@kernel.org>
    Assisted-by: gregkh_clanker_t1000
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>