Skip to content

[Deepin-Kernel-SIG] [linux 6.18-y] [Upstream] Update kernel base to 6.18.23#1639

Open
opsiff wants to merge 85 commits intodeepin-community:linux-6.18.yfrom
opsiff:linux-6.18-update-6.18.23
Open

[Deepin-Kernel-SIG] [linux 6.18-y] [Upstream] Update kernel base to 6.18.23#1639
opsiff wants to merge 85 commits intodeepin-community:linux-6.18.yfrom
opsiff:linux-6.18-update-6.18.23

Conversation

@opsiff
Copy link
Copy Markdown
Member

@opsiff opsiff commented Apr 21, 2026

Update kernel base to 6.18.23.

git log --oneline v6.18.22..v6.18.23 | wc
85 740 6003

Summary by Sourcery

Rebase the Deepin linux-6.18.y kernel to v6.18.23 and integrate the associated upstream fixes across MM, networking, filesystems, drivers, and architecture code.

Bug Fixes:

  • Improve MIPS TLB uniquification and virtual address bit probing to avoid clashes with wired/global entries and handle 32/64-bit CPUs correctly.
  • Harden AF_UNIX garbage collection against races with MSG_PEEK and cyclic graph detection, preventing premature frees and missed cycles.
  • Fix various rxrpc and rxgk security handling issues including proper crypto error propagation, bounds checks, key/ticket parsing, and connection state updates.
  • Correct RXRPC key parsing and quota accounting for RxKAD/RxGK tokens, including length validation and safe allocations.
  • Handle async and error paths correctly in TLS, XFRM, RXRPC, and crypto code to avoid leaks, double-frees, and incorrect device reference management.
  • Prevent rfkill event list growth by bounding per-source in-flight events and tracking event counts.
  • Fix uinput and vub300 lifetime and state races by introducing proper locking and host freeing order.
  • Resolve multiple network driver issues in lan966x, idpf, altera_tse, stmmac, qca_uart, brcmsmac, rt2x00usb, mlx5, and others, covering DMA failures, MTU reload, page-pool handling, and new PCI IDs.
  • Tighten Btrfs extent reference handling and tree block freeing logic to return early on mismatches and errors instead of falling through.
  • Ensure DAMON sysfs/stat control paths properly recreate/destroy contexts and handle failed asynchronous calls.
  • Correct EDAC mc allocation ordering to avoid use of uninitialized device structures.
  • Fix X.509 and TPMI parser edge cases, including length and type checks, zeroing of structures, and autonomous UFS capability detection.
  • Address mm and filemap races around memory hotplug node states and truncation vs. page mapping, and clean up small utility bugs in dma, modpost, and others.

Enhancements:

  • Split Segment Routing IPv6 lwtunnel input/output route caches to avoid dst reference loops and improve caching accuracy.
  • Extend rxrpc proc and trace stats (e.g. jumbo window ACK reasons) and adjust call teardown diagnostics.
  • Refine Intel PSR2 selective fetch damage tracking to operate on the full display area instead of pipe source size.
  • Add mitigation for AMD Zen1 FPDSS bug via a new FP configuration MSR bit and export the corresponding MSR definition.
  • Improve workqueue plug handling by restoring pending workqueue queue state when unplugging and kicking the pool.
  • Tighten TIPC group ACK handling to ignore stale acknowledgements and only progress on increasing sequence numbers.

Tests:

  • No explicit test changes are included in this diff; behavior is validated implicitly by upstream coverage for the 6.18.23 release.

nathancrebello and others added 30 commits April 21, 2026 14:59
commit 5a1140404cbf7ba40137dfb1fb96893aa9a67d68 upstream.

Notifications can arrive before ucsi_init() has populated
ucsi->cap.num_connectors via GET_CAPABILITY. At that point
num_connectors is still 0, causing all valid connector numbers to be
incorrectly rejected as bogus.

Skip the bounds check when num_connectors is 0 (not yet initialized).
Pre-init notifications are already handled safely by the early-event
guard in ucsi_connector_change().

Reported-by: Takashi Iwai <tiwai@suse.de>
Fixes: d2d8c17ac01a ("usb: typec: ucsi: validate connector number in ucsi_notify_common()")
Cc: stable@vger.kernel.org
Signed-off-by: Nathan Rebello <nathan.c.rebello@gmail.com>
Tested-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20260407063958.863-1-nathan.c.rebello@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit f4786c34216a702d108e53fc890bd21e547aabc9)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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: 8b4c000 ("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>
(cherry picked from commit e360d15fcb1e819eef49e3d4434d8050542eed16)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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>
(cherry picked from commit 6c55714c931051cd7f4839c19ce0867179fd22fe)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
…eated

commit ea245d78dec594372e27d8c79616baf49e98a4a1 upstream.

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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit a8c26800e0220e1550af012f5a20e50f5c78864d)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
…eadphone"

commit 8508e9118649f13f7b857e9e10147b241db615d7 upstream.

This reverts commit 56fbbe096a89ff4b52af78a21a4afd9d94bdcc80.

It caused regressions on other Gigabyte models, and looking at the
bugzilla entry again, the suggested change appears rather dubious, as
incorrectly setting the front mic pin as the headphone.

Fixes: 56fbbe096a89 ("ALSA: hda/realtek: Add quirk for Gigabyte Technology to fix headphone")
Cc: <stable@vger.kernel.org>
Reported-by: Marcin Krycki <m.krycki@gmail.com>
Reported-by: Theodoros Orfanidis <teoulas@gmail.com>
Closes: https://lore.kernel.org/CAEfRphPU_ABuVFzaHhspxgp2WAqi7kKNGo4yOOt0zeVFPSj8+Q@mail.gmail.com
Link: https://patch.msgid.link/20260407123333.171130-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 130c991e6aad032f8c1449afa97dcdde91e722fb)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 8e2760eaab778494fc1fa257031e0e1799647f46 upstream.

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: 584f389 ("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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 96a95b6d9e6dca5d338e58991e02e9c1efdaf2fe)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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: b19bc29 ("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>
(cherry picked from commit 15fa9ead4d5e6b6b9c794e84144146c917f2cb62)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit c3812651b522fe8437ebb7063b75ddb95b571643 upstream.

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: 6c8702c ("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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit fb56de5d99218de49d5d43ef3a99e062ecd0f9a1)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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: ff46255 ("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>
(cherry picked from commit 1e09dfbb4f5d20ee111f92325a00f85778a5f328)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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>
(cherry picked from commit 6c098142b37015610ad9de403e670b5956f7eb13)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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>
(cherry picked from commit 6c600fc0e99180c7a1b91c93e359009be8b4cfc2)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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>
(cherry picked from commit ccc6a2241a49f68d8656ab1e10df377acfe2c5b4)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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: 9f048fa ("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>
(cherry picked from commit d8b281165a86041bb40e055eb79f735826d0df1b)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
[ Upstream commit ea8f921 ]

Some functions (lookup_extent_data_ref(), __btrfs_mod_ref() and
btrfs_free_tree_block()) have an 'out' label that does nothing but
return, making it pointless. Simplify this by removing the label and
returning instead of gotos plus setting the 'ret' variable.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Stable-dep-of: 316fb1b3169e ("btrfs: fix incorrect return value after changing leaf in lookup_extent_data_ref()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit 2124a61e6e2b0359ad27d782e23abb699b2f26e0)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
…t_data_ref()

[ Upstream commit 316fb1b3169efb081d2db910cbbfef445afa03b9 ]

After commit 1618aa3 ("btrfs: simplify return variables in
lookup_extent_data_ref()"), the err and ret variables were merged into
a single ret variable. However, when btrfs_next_leaf() returns 0
(success), ret is overwritten from -ENOENT to 0. If the first key in
the next leaf does not match (different objectid or type), the function
returns 0 instead of -ENOENT, making the caller believe the lookup
succeeded when it did not. This can lead to operations on the wrong
extent tree item, potentially causing extent tree corruption.

Fix this by returning -ENOENT directly when the key does not match,
instead of relying on the ret variable.

Fixes: 1618aa3 ("btrfs: simplify return variables in lookup_extent_data_ref()")
CC: stable@vger.kernel.org # 6.12+
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: robbieko <robbieko@synology.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit 450e6a685d0cad95b15f8af152057bd0bf79f50b)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
[ Upstream commit 58b47c7 ]

__unix_walk_scc() and unix_walk_scc_fast() call unix_scc_cyclic()
for each SCC to check if it forms a cyclic reference, so that we
can skip GC at the following invocations in case all SCCs do not
have any cycles.

If we count the number of cyclic SCCs in __unix_walk_scc(), we can
simplify unix_walk_scc_fast() because the number of cyclic SCCs
only changes when it garbage-collects a SCC.

So, let's count cyclic SCC in __unix_walk_scc() and decrement it
in unix_walk_scc_fast() when performing garbage collection.

Note that we will use this counter in a later patch to check if a
cycle existed in the previous GC run.

Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20251115020935.2643121-2-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Stable-dep-of: e5b31d988a41 ("af_unix: Give up GC if MSG_PEEK intervened.")
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit 1e211179f1d9273b6cfd0b30d6983dc1d626736b)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
[ Upstream commit 6b6f3c7 ]

GC manages its state by two variables, unix_graph_maybe_cyclic
and unix_graph_grouped, both of which are set to false in the
initial state.

When an AF_UNIX socket is passed to an in-flight AF_UNIX socket,
unix_update_graph() sets unix_graph_maybe_cyclic to true and
unix_graph_grouped to false, making the next GC invocation call
unix_walk_scc() to group SCCs.

Once unix_walk_scc() finishes, sockets in the same SCC are linked
via vertex->scc_entry.  Then, unix_graph_grouped is set to true
so that the following GC invocations can skip Tarjan's algorithm
and simply iterate through the list in unix_walk_scc_fast().

In addition, if we know there is at least one cyclic reference,
we set unix_graph_maybe_cyclic to true so that we do not skip GC.

So the state transitions as follows:

  (unix_graph_maybe_cyclic, unix_graph_grouped)
  =
  (false, false) -> (true, false) -> (true, true) or (false, true)
                         ^.______________/________________/

There is no transition to the initial state where both variables
are false.

If we consider the initial state as grouped, we can see that the
GC actually has a tristate.

Let's consolidate two variables into one enum.

Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20251115020935.2643121-3-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Stable-dep-of: e5b31d988a41 ("af_unix: Give up GC if MSG_PEEK intervened.")
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit 33120558237c7e13db3c39f09fd712431e455005)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
[ Upstream commit e5b31d988a41549037b8d8721a3c3cae893d8670 ]

Igor Ushakov reported that GC purged the receive queue of
an alive socket due to a race with MSG_PEEK with a nice repro.

This is the exact same issue previously fixed by commit
cbcf011 ("af_unix: fix garbage collect vs MSG_PEEK").

After GC was replaced with the current algorithm, the cited
commit removed the locking dance in unix_peek_fds() and
reintroduced the same issue.

The problem is that MSG_PEEK bumps a file refcount without
interacting with GC.

Consider an SCC containing sk-A and sk-B, where sk-A is
close()d but can be recv()ed via sk-B.

The bad thing happens if sk-A is recv()ed with MSG_PEEK from
sk-B and sk-B is close()d while GC is checking unix_vertex_dead()
for sk-A and sk-B.

  GC thread                    User thread
  ---------                    -----------
  unix_vertex_dead(sk-A)
  -> true   <------.
                    \
                     `------   recv(sk-B, MSG_PEEK)
              invalidate !!    -> sk-A's file refcount : 1 -> 2

                               close(sk-B)
                               -> sk-B's file refcount : 2 -> 1
  unix_vertex_dead(sk-B)
  -> true

Initially, sk-A's file refcount is 1 by the inflight fd in sk-B
recvq.  GC thinks sk-A is dead because the file refcount is the
same as the number of its inflight fds.

However, sk-A's file refcount is bumped silently by MSG_PEEK,
which invalidates the previous evaluation.

At this moment, sk-B's file refcount is 2; one by the open fd,
and one by the inflight fd in sk-A.  The subsequent close()
releases one refcount by the former.

Finally, GC incorrectly concludes that both sk-A and sk-B are dead.

One option is to restore the locking dance in unix_peek_fds(),
but we can resolve this more elegantly thanks to the new algorithm.

The point is that the issue does not occur without the subsequent
close() and we actually do not need to synchronise MSG_PEEK with
the dead SCC detection.

When the issue occurs, close() and GC touch the same file refcount.
If GC sees the refcount being decremented by close(), it can just
give up garbage-collecting the SCC.

Therefore, we only need to signal the race during MSG_PEEK with
a proper memory barrier to make it visible to the GC.

Let's use seqcount_t to notify GC when MSG_PEEK occurs and let
it defer the SCC to the next run.

This way no locking is needed on the MSG_PEEK side, and we can
avoid imposing a penalty on every MSG_PEEK unnecessarily.

Note that we can retry within unix_scc_dead() if MSG_PEEK is
detected, but we do not do so to avoid hung task splat from
abusive MSG_PEEK calls.

Fixes: 118f457 ("af_unix: Remove lock dance in unix_peek_fds().")
Reported-by: Igor Ushakov <sysroot314@gmail.com>
Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20260311054043.1231316-1-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit 72cf49ad50c16270b52bc512d9c2df5743922968)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 39ed7d89b973329cc5c764b65ba6302b17b1907e upstream.

commit 66d88e1 ("dmaengine: fsl-edma: read/write multiple registers
in cyclic transactions") causes fsl_edma_fill_tcd() to read
dst_port_window_size and src_port_window_size when building transfer
control descriptors.

Initialize the structure so unset fields are explicitly zero.

Fixes: 66d88e1 ("dmaengine: fsl-edma: read/write multiple registers in cyclic transactions")
Signed-off-by: Anthony Pighin <anthony.pighin@nokia.com>
Cc: <stable@vger.kernel.org> # v6.14+
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
Link: https://lore.kernel.org/r/20260331182632.888110-1-anthony.pighin@nokia.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 2802ba3981f15ed8e89fe86544aad2f43acd17b7)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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: 7e0b2b5 ("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>
(cherry picked from commit b42aca3660dc2627a29a38131597ca610dc451f9)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 88c4bd90725557796c15878b7cb70066e9e6b5ab upstream.

Addresses two issues in the TH1520 AON firmware protocol driver:

1. Fix a potential buffer overflow where the code used unsafe pointer
   arithmetic to access the 'mode' field through the 'resource' pointer
   with an offset. This was flagged by Smatch static checker as:
   "buffer overflow 'data' 2 <= 3"

2. Replace custom RPC_SET_BE* and RPC_GET_BE* macros with standard
   kernel endianness conversion macros (cpu_to_be16, etc.) for better
   portability and maintainability.

The functionality was re-tested with the GPU power-up sequence,
confirming the GPU powers up correctly and the driver probes
successfully.

[   12.702370] powervr ffef400000.gpu: [drm] loaded firmware
powervr/rogue_36.52.104.182_v1.fw
[   12.711043] powervr ffef400000.gpu: [drm] FW version v1.0 (build
6645434 OS)
[   12.719787] [drm] Initialized powervr 1.0.0 for ffef400000.gpu on
minor 0

Fixes: e4b3cbd ("firmware: thead: Add AON firmware protocol driver")
Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
Closes: https://lore.kernel.org/all/17a0ccce-060b-4b9d-a3c4-8d5d5823b1c9@stanley.mountain/
Signed-off-by: Michal Wilczynski <m.wilczynski@samsung.com>
Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
Acked-by: Drew Fustini <fustini@kernel.org>
Cc: stable@vger.kernel.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit fbdb43f6bb2a15ed382d6eb0ef82c8b07b0d47bb)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
…ltiple inactive works

commit 703ccb63ae9f7444d6ff876d024e17f628103c69 upstream.

In unplug_oldest_pwq(), the first inactive work item on the
pool_workqueue is activated correctly. However, if multiple inactive
works exist on the same pool_workqueue, subsequent works fail to
activate because wq_node_nr_active.pending_pwqs is empty — the list
insertion is skipped when the pool_workqueue is plugged.

Fix this by checking for additional inactive works in
unplug_oldest_pwq() and updating wq_node_nr_active.pending_pwqs
accordingly.

Fixes: 4c065db ("workqueue: Enable unbound cpumask update on ordered workqueues")
Cc: stable@vger.kernel.org
Cc: Carlos Santa <carlos.santa@intel.com>
Cc: Ryan Neph <ryanneph@google.com>
Cc: Lai Jiangshan <jiangshanlai@gmail.com>
Cc: Waiman Long <longman@redhat.com>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Waiman Long <longman@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 0133aa1a28af222d124f7c289ac9abdcea5220ac)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit deb4605671cfae3b2803cfbbf4739e7245248398 upstream.

A recent strengthening of -Wunused-but-set-variable (enabled with -Wall)
in clang under a new subwarning, -Wunused-but-set-global, points out an
unused static global variable in scripts/mod/modpost.c:

  scripts/mod/modpost.c:59:13: error: variable 'extra_warn' set but not used [-Werror,-Wunused-but-set-global]
     59 | static bool extra_warn;
        |             ^

This variable has been unused since commit 6c6c1fc ("modpost:
require a MODULE_DESCRIPTION()") but that is expected, as there are
currently no extra warnings at W=1 right now. Declare the variable with
the unused attribute to make it clear to the compiler that this variable
may be unused.

Cc: stable@vger.kernel.org
Fixes: 6c6c1fc ("modpost: require a MODULE_DESCRIPTION()")
Link: https://patch.msgid.link/20260325-modpost-extra_warn-unused-but-set-global-v1-1-2e84003b7e81@kernel.org
Reviewed-by: Nicolas Schier <nsc@kernel.org>
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 688c1b491c35d43fac013d5aa5490ae4c04a76a3)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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: 1da177e ("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>
(cherry picked from commit b1dfd6b27df35ef4f87825aa5f607378d23ff0f2)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 1c428b03840094410c5fb6a5db30640486bbbfcb upstream.

After async crypto completes, xfrm_input_resume() calls dev_put()
immediately on re-entry before the skb reaches transport_finish.
The skb->dev pointer is then used inside NF_HOOK and its okfn,
which can race with device teardown.

Remove the dev_put from the async resumption entry and instead
drop the reference after the NF_HOOK call in transport_finish,
using a saved device pointer since NF_HOOK may consume the skb.
This covers NF_DROP, NF_QUEUE and NF_STOLEN paths that skip
the okfn.

For non-transport exits (decaps, gro, drop) and secondary
async return points, release the reference inline when
async is set.

Suggested-by: Florian Westphal <fw@strlen.de>
Fixes: acf568e ("xfrm: Reinject transport-mode packets through tasklet")
Cc: stable@vger.kernel.org
Signed-off-by: Qi Tang <tpluszz77@gmail.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 0f451b43c88bf2b9c038b414be580efee42e031b)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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: 2f48771 ("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>
(cherry picked from commit 1b6f13f626665cac67ba5a012765427680518711)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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: 5b435de ("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>
(cherry picked from commit b27fa888e4a426a3bcf6f6ab24701d888d9bf5aa)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit e1415b9418eb22b4a7a1ef4b4aec9dd0a49e3fa7 upstream.

Based on feature revision, number of buckets can be less than the
TRL_MAX_BUCKETS. In that case core counts in the remaining buckets
can be set to some invalid values.

Hence reset core count to 0 for all buckets before assigning correct
values.

Fixes: 885d1c2 ("platform/x86: ISST: Support SST-TF revision 2")
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260325192638.3417281-1-srinivas.pandruvada@linux.intel.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit c4e1eff4606c7bf8c3289051f63f08ca65653ae2)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 4ab604b3f3aa8dcccc7505f5d310016682a99d5f upstream.

When the AUTONOMOUS_UFS_DISABLED bit is set in the header, the ELC
(Efficiency Latency Control) feature is non-functional. Hence, return
error for read or write to ELC attributes.

Fixes: bb516dc ("platform/x86/intel-uncore-freq: Add support for efficiency latency control")
Signed-off-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260325192909.3417322-1-srinivas.pandruvada@linux.intel.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit fecceacbaf48219519c50d692d05de00e4689b7b)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
…ook Pro"

commit 29d1f56c4f3001b7f547123e0a307c009ac717f8 upstream.

This reverts commit 6d54d93.

It seems there are different variants of the Wifi chipset in use on the
Pinebook Pro. And according to the reported regression - see Closes
below, the reverted change causes issues with one Wifi chipset.

The original commit message indicates a "further description" only and
does not indicate this would fix an actual problem, so a revert should
not cause further problems.

Fixes: 6d54d93 ("arm64: dts: rockchip: Further describe the WiFi for the Pinebook Pro")
Cc: Jan Palus <jpalus@fastmail.com>
Cc: Peter Robinson <pbrobinson@gmail.com>
Cc: Thorsten Leemhuis <regressions@leemhuis.info>
Cc: stable@vger.kernel.org
Closes: https://lore.kernel.org/r/aUKOlj-RvTYlrpiS@rock.grzadka/
Tested-by: Jan Palus <jpalus@fastmail.com>
Reviewed-by: Dragan Simic <dsimic@manjaro.org>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patch.msgid.link/20260210120142.698512-1-heiko@sntech.de
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit aee881c21b576159c7a814f39604308895affcaa)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
1seal and others added 20 commits April 21, 2026 14:59
commit d179a868dd755b0cfcf7582e00943d702b9943b8 upstream.

rxrpc_preparse_xdr_yfs_rxgk() reads the raw key length and ticket length
from the XDR token as u32 values and passes each through round_up(x, 4)
before using the rounded value for validation and allocation.  When the raw
length is >= 0xfffffffd, round_up() wraps to 0, so the bounds check and
kzalloc both use 0 while the subsequent memcpy still copies the original
~4 GiB value, producing a heap buffer overflow reachable from an
unprivileged add_key() call.

Fix this by:

 (1) Rejecting raw key lengths above AFSTOKEN_GK_KEY_MAX and raw ticket
     lengths above AFSTOKEN_GK_TOKEN_MAX before rounding, consistent with
     the caps that the RxKAD path already enforces via AFSTOKEN_RK_TIX_MAX.

 (2) Sizing the flexible-array allocation from the validated raw key
     length via struct_size_t() instead of the rounded value.

 (3) Caching the raw lengths so that the later field assignments and
     memcpy calls do not re-read from the token, eliminating a class of
     TOCTOU re-parse.

The control path (valid token with lengths within bounds) is unaffected.

Fixes: 0ca100f ("rxrpc: Add YFS RxGK (GSSAPI) security class")
Signed-off-by: Oleh Konko <security@1seal.org>
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeffrey Altman <jaltman@auristor.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-6-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 3e04596cba8a86cbff9c3f4bf0a524a3a488773c)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit b33f5741bb187db8ff32e8f5b96def77cc94dfca upstream.

In rxrpc_post_response(), the code should be comparing the challenge serial
number from the cached response before deciding to switch to a newer
response, but looks at the newer packet private data instead, rendering the
comparison always false.

Fix this by switching to look at the older packet.

Fix further[1] to substitute the new packet in place of the old one if
newer and also to release whichever we don't use.

Fixes: 5800b1c ("rxrpc: Allow CHALLENGEs to the passed to the app for a RESPONSE")
Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeffrey Altman <jaltman@auristor.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://sashiko.dev/#/patchset/20260319150150.4189381-1-dhowells%40redhat.com [1]
Link: https://patch.msgid.link/20260408121252.2249051-7-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 9132b1a7bf83b4a8042fffbc99d075b727a16742)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 65b3ffe0972ed023acc3981a0f7e1ae5d0208bd3 upstream.

rxrpc_rack_timer_expired() clears call->rack_timer_mode to OFF before
the switch. The default case warning therefore always prints OFF and
doesn't identify the unexpected timer mode.

Log the saved mode value instead so the warning reports the actual
unexpected rack timer mode.

Fixes: 7c48266 ("rxrpc: Implement RACK/TLP to deal with transmission stalls [RFC8985]")
Signed-off-by: Alok Tiwari <alok.a.tiwari@oracle.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
cc: stable@kernel.org
Link: https://patch.msgid.link/20260408121252.2249051-8-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 86303a1da93f6ecdd0792330a71c71e20aeef718)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit d666540d217e8d420544ebdfbadeedd623562733 upstream.

When creating a client call in rxrpc_alloc_client_call(), the code obtains
a reference to the key.  This is never cleaned up and gets leaked when the
call is destroyed.

Fix this by freeing call->key in rxrpc_destroy_call().

Before the patch, it shows the key reference counter elevated:

$ cat /proc/keys | grep afs@54321
1bffe9cd I--Q--i 8053480 4169w 3b010000  1000  1000 rxrpc     afs@54321: ka
$

After the patch, the invalidated key is removed when the code exits:

$ cat /proc/keys | grep afs@54321
$

Fixes: f3441d4 ("rxrpc: Copy client call parameters into rxrpc_call earlier")
Signed-off-by: Anderson Nascimento <anderson@allelesecurity.com>
Co-developed-by: David Howells <dhowells@redhat.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeffrey Altman <jaltman@auristor.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-9-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 2e6ef713b1598f6acd7f302fa6b12b6731c89914)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 0cd3e3f3f2ec1a45aa559e2c0f3d57fac5eb3c25 upstream.

Peers may only send immediate acks for every 2 UDP packets received.
When sending a jumbogram, it is important to check that there is
sufficient window space to send another same sized jumbogram following
the current one, and request an ack if there isn't.  Failure to do so may
cause the call to stall waiting for an ack until the resend timer fires.

Where jumbograms are in use this causes a very significant drop in
performance.

Fixes: fe24a54 ("rxrpc: Send jumbo DATA packets")
Signed-off-by: Marc Dionne <marc.dionne@auristor.com>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Jeffrey Altman <jaltman@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-10-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 8b353f5f138573b50dd50bdaf1d822c77b0c4cfe)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 6331f1b24a3e85465f6454e003a3e6c22005a5c5 upstream.

rxrpc_input_packet_on_conn() can process a to-client packet after the
current client call on the channel has already been torn down.  In that
case chan->call is NULL, rxrpc_try_get_call() returns NULL and there is
no reference to drop.

The client-side implicit-end error path does not account for that and
unconditionally calls rxrpc_put_call().  This turns a protocol error
path into a kernel crash instead of rejecting the packet.

Only drop the call reference if one was actually acquired.  Keep the
existing protocol error handling unchanged.

Fixes: 5e6ef4f ("rxrpc: Make the I/O thread take over the call and local processor work")
Reported-by: Yifan Wu <yifanwucs@gmail.com>
Reported-by: Juefei Pu <tomapufckgml@gmail.com>
Signed-off-by: Douya Le <ldy3087146292@gmail.com>
Co-developed-by: Yuan Tan <tanyuan98@gmail.com>
Signed-off-by: Yuan Tan <tanyuan98@gmail.com>
Suggested-by: Xin Liu <bird@lzu.edu.cn>
Signed-off-by: Ao Zhou <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-11-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 8299ca146489664e3c0c90a3b8900d8335b1ede4)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit fe4447cd95623b1cfacc15f280aab73a6d7340b2 upstream.

rxkad_decrypt_ticket() decrypts the RXKAD response ticket and then
parses the buffer as plaintext without checking whether
crypto_skcipher_decrypt() succeeded.

A malformed RESPONSE can therefore use a non-block-aligned ticket
length, make the decrypt operation fail, and still drive the ticket
parser with attacker-controlled bytes.

Check the decrypt result and abort the connection with RXKADBADTICKET
when ticket decryption fails.

Fixes: 17926a7 ("[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: Yuqi Xu <xuyuqiabc@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-12-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 22f6258e7b31dba9bf88dce4e3ee7f0f20072e60)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 3e3138007887504ee9206d0bfb5acb062c600025 upstream.

rxgk_verify_authenticator() copies auth_len bytes into a temporary
buffer and then passes p + auth_len as the parser limit to
rxgk_do_verify_authenticator(). Since p is a __be32 *, that inflates the
parser end pointer by a factor of four and lets malformed RESPONSE
authenticators read past the kmalloc() buffer.

Decoded from the original latest-net reproduction logs with
scripts/decode_stacktrace.sh:

BUG: KASAN: slab-out-of-bounds in rxgk_verify_response()
Call Trace:
 dump_stack_lvl() [lib/dump_stack.c:123]
 print_report() [mm/kasan/report.c:379 mm/kasan/report.c:482]
 kasan_report() [mm/kasan/report.c:597]
 rxgk_verify_response()
   [net/rxrpc/rxgk.c:1103 net/rxrpc/rxgk.c:1167
    net/rxrpc/rxgk.c:1274]
 rxrpc_process_connection()
   [net/rxrpc/conn_event.c:266 net/rxrpc/conn_event.c:364
    net/rxrpc/conn_event.c:386]
 process_one_work() [kernel/workqueue.c:3281]
 worker_thread()
   [kernel/workqueue.c:3353 kernel/workqueue.c:3440]
 kthread() [kernel/kthread.c:436]
 ret_from_fork() [arch/x86/kernel/process.c:164]

Allocated by task 54:
 rxgk_verify_response()
   [include/linux/slab.h:954 net/rxrpc/rxgk.c:1155
    net/rxrpc/rxgk.c:1274]
 rxrpc_process_connection()
   [net/rxrpc/conn_event.c:266 net/rxrpc/conn_event.c:364
    net/rxrpc/conn_event.c:386]

Convert the byte count to __be32 units before constructing the parser
limit.

Fixes: 9d1d2b5 ("rxrpc: rxgk: Implement the yfs-rxgk security class (GSSAPI)")
Signed-off-by: Keenan Dong <keenanat2000@gmail.com>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Simon Horman <horms@kernel.org>
cc: Willy Tarreau <w@1wt.eu>
cc: linux-afs@lists.infradead.org
cc: stable@kernel.org
Link: https://patch.msgid.link/20260408121252.2249051-13-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 7875f3d9777bd4e9892c4db830571ab8ac2044c0)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit a2567217ade970ecc458144b6be469bc015b23e5 upstream.

rxgk_verify_response() decodes auth_len from the packet and is supposed
to verify that it fits in the remaining bytes. The existing check is
inverted, so oversized RESPONSE authenticators are accepted and passed
to rxgk_decrypt_skb(), which can later reach skb_to_sgvec() with an
impossible length and hit BUG_ON(len).

Decoded from the original latest-net reproduction logs with
scripts/decode_stacktrace.sh:

RIP: __skb_to_sgvec()
  [net/core/skbuff.c:5285 (discriminator 1)]
Call Trace:
 skb_to_sgvec() [net/core/skbuff.c:5305]
 rxgk_decrypt_skb() [net/rxrpc/rxgk_common.h:81]
 rxgk_verify_response() [net/rxrpc/rxgk.c:1268]
 rxrpc_process_connection()
   [net/rxrpc/conn_event.c:266 net/rxrpc/conn_event.c:364
    net/rxrpc/conn_event.c:386]
 process_one_work() [kernel/workqueue.c:3281]
 worker_thread()
   [kernel/workqueue.c:3353 kernel/workqueue.c:3440]
 kthread() [kernel/kthread.c:436]
 ret_from_fork() [arch/x86/kernel/process.c:164]

Reject authenticator lengths that exceed the remaining packet payload.

Fixes: 9d1d2b5 ("rxrpc: rxgk: Implement the yfs-rxgk security class (GSSAPI)")
Signed-off-by: Keenan Dong <keenanat2000@gmail.com>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Simon Horman <horms@kernel.org>
cc: Willy Tarreau <w@1wt.eu>
cc: linux-afs@lists.infradead.org
cc: stable@kernel.org
Link: https://patch.msgid.link/20260408121252.2249051-14-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit beee051f259acd286fed64c32c2b31e6f5097eb5)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit f125846ee79fcae537a964ce66494e96fa54a6de upstream.

This patch fixes a reference count leak in rxrpc_server_keyring()
by checking if rx->securities is already set.

Fixes: 17926a7 ("[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>
(cherry picked from commit 8ee931c3cd97f1c42b4fbf057f04b9dae45dfb7a)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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: 17926a7 ("[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>
(cherry picked from commit 03d1c51decaeb8700746ef79c50f4ebb6f1d8139)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit f93af41b9f5f798823d0d0fb8765c2a936d76270 upstream.

Add error checking for failure of crypto_skcipher_en/decrypt() to various
rxkad function as the crypto functions can fail with ENOMEM at least.

Fixes: 17926a7 ("[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: Jeffrey Altman <jaltman@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-17-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit bf4d6e4a6856eedeb7f66eb91224115bfff4e2cb)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 699e52180f4231c257821c037ed5c99d5eb0edb8 upstream.

In rxgk_verify_response(), there's a potential integer overflow due to
rounding up token_len before checking it, thereby allowing the length check to
be bypassed.

Fix this by checking the unrounded value against len too (len is limited as
the response must fit in a single UDP packet).

Fixes: 9d1d2b5 ("rxrpc: rxgk: Implement the yfs-rxgk security class (GSSAPI)")
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: Jeffrey Altman <jaltman@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-18-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 1f864d9daaf622aeaa774404fd51e7d6a435b046)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 7e1876caa8363056f58a21d3b31b82c2daf7e608 upstream.

Fix rxgk_verify_response() to clean up the rxgk context it creates.

Fixes: 9d1d2b5 ("rxrpc: rxgk: Implement the yfs-rxgk security class (GSSAPI)")
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: Jeffrey Altman <jaltman@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-19-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 4b5e8365515f4409de7d3b92a439154ee4f90f6d)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit f564af387c8c28238f8ebc13314c589d7ba8475d upstream.

Fix rxgk_do_verify_authenticator() to check the buffer size before checking
the nonce.

Fixes: 9d1d2b5 ("rxrpc: rxgk: Implement the yfs-rxgk security class (GSSAPI)")
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: Jeffrey Altman <jaltman@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-20-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 794586789800b16dcbe235452494f4223ac80413)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit c43ffdcfdbb5567b1f143556df8a04b4eeea041c upstream.

Only process RESPONSE packets while the service connection is still in
RXRPC_CONN_SERVICE_CHALLENGING. Check that state under state_lock before
running response verification and security initialization, then use a local
secured flag to decide whether to queue the secured-connection work after
the state transition. This keeps duplicate or late RESPONSE packets from
re-running the setup path and removes the unlocked post-transition state
test.

Fixes: 17926a7 ("[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>
Signed-off-by: Jie Wang <jiewang2024@lzu.edu.cn>
Signed-off-by: Yang Yang <n05ec@lzu.edu.cn>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Jeffrey Altman <jaltman@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-21-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit d0035e634dae83237ab7f5681eb52b2f65d0ceb8)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit a44ce6aa2efb61fe44f2cfab72bb01544bbca272 upstream.

The AF_RXRPC procfs helpers format local and remote socket addresses into
fixed 50-byte stack buffers with "%pISpc".

That is too small for the longest current-tree IPv6-with-port form the
formatter can produce. In lib/vsprintf.c, the compressed IPv6 path uses a
dotted-quad tail not only for v4mapped addresses, but also for ISATAP
addresses via ipv6_addr_is_isatap().

As a result, a case such as

  [ffff:ffff:ffff:ffff:0:5efe:255.255.255.255]:65535

is possible with the current formatter. That is 50 visible characters, so
51 bytes including the trailing NUL, which does not fit in the existing
char[50] buffers used by net/rxrpc/proc.c.

Size the buffers from the formatter's maximum textual form and switch the
call sites to scnprintf().

Changes since v1:
- correct the changelog to cite the actual maximum current-tree case
  explicitly
- frame the proof around the ISATAP formatting path instead of the earlier
  mapped-v4 example

Fixes: 75b54cb ("rxrpc: Add IPv6 support")
Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Anderson Nascimento <anderson@allelesecurity.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
cc: stable@kernel.org
Link: https://patch.msgid.link/20260408121252.2249051-22-dhowells@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit db297c78ce537c9ac96f0eda9b25ad72c8caefa9)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
commit 0f42e3f4fe2a58394e37241d02d9ca6ab7b7d516 upstream.

SKB_SMALL_HEAD_CACHE_SIZE is intentionally set to a non-power-of-2
value (e.g. 704 on x86_64) to avoid collisions with generic kmalloc
bucket sizes. This ensures that skb_kfree_head() can reliably use
skb_end_offset to distinguish skb heads allocated from
skb_small_head_cache vs. generic kmalloc caches.

However, when KFENCE is enabled, kfence_ksize() returns the exact
requested allocation size instead of the slab bucket size. If a caller
(e.g. bpf_test_init) allocates skb head data via kzalloc() and the
requested size happens to equal SKB_SMALL_HEAD_CACHE_SIZE, then
slab_build_skb() -> ksize() returns that exact value. After subtracting
skb_shared_info overhead, skb_end_offset ends up matching
SKB_SMALL_HEAD_HEADROOM, causing skb_kfree_head() to incorrectly free
the object to skb_small_head_cache instead of back to the original
kmalloc cache, resulting in a slab cross-cache free:

  kmem_cache_free(skbuff_small_head): Wrong slab cache. Expected
  skbuff_small_head but got kmalloc-1k

Fix this by always calling kfree(head) in skb_kfree_head(). This keeps
the free path generic and avoids allocator-specific misclassification
for KFENCE objects.

Fixes: bf9f1ba ("net: add dedicated kmem_cache for typical/small skb->head")
Reported-by: Antonius <antonius@bluedragonsec.com>
Closes: https://lore.kernel.org/netdev/CAK8a0jxC5L5N7hq-DT2_NhUyjBxrPocoiDazzsBk4TGgT1r4-A@mail.gmail.com/
Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260403014517.142550-1-jiayuan.chen@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 2d64618ea846d8d033477311f805ca487d6a6696)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
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>
(cherry picked from commit ad17f07e95e6e8505e2153e5b391f0d27eacce25)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
Link: https://lore.kernel.org/r/20260413155731.019638460@linuxfoundation.org
Tested-by: Brett A C Sheffield <bacs@librecast.net>
Tested-by: Florian Fainelli <florian.fainelli@broadcom.com>
Tested-by: Wentao Guan <guanwentao@uniontech.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Tested-by: Pavel Machek (CIP) <pavel@nabladev.com>
Tested-by: Ron Economos <re@w6rz.net>
Tested-by: Shuah Khan <skhan@linuxfoundation.org>
Tested-by: Miguel Ojeda <ojeda@kernel.org>
Tested-by: Peter Schneider <pschneider1968@googlemail.com>
Tested-by: Barry K. Nathan <barryn@pobox.com>
Tested-by: Shung-Hsi Yu <shung-hsi.yu@suse.com>
Tested-by: Mark Brown <broonie@kernel.org>
Tested-by: Dileep Malepu <dileep.debian@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 47a33eea6d5145d53e42315381ef28286c2218fb)
Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
@sourcery-ai
Copy link
Copy Markdown

sourcery-ai bot commented Apr 21, 2026

Reviewer's Guide

Rebase to upstream v6.18.23 and pull in the corresponding stable fixes. The diff updates MIPS TLB uniquification and vmbits probing, tightens UNIX domain GC with MSG_PEEK interaction, hardens rxrpc/rxgk and rxkad crypto/error handling, adjusts several networking and driver subsystems (MPTCP, xfrm, seg6, rfkill, uinput, DMA/drivers) for correctness and robustness, fixes memory hotplug/DAMON and proc/stat accounting, and bumps the kernel version to 6.18.23.

Sequence diagram for UNIX domain GC interaction with MSG_PEEK

sequenceDiagram
    actor App
    participant Sender as unix_sender
    participant Receiver as unix_receiver
    participant GC as unix_gc_worker

    App->>Receiver: recv(MSG_PEEK)
    note right of Receiver: unix_peek_fds()
    Receiver->>Receiver: scm_fp_dup()
    Receiver->>GC: unix_peek_fpl(fpl)
    GC->>GC: READ_ONCE(gc_in_progress)
    alt GC not running
        GC-->>Receiver: return
    else GC running
        GC->>GC: spin_lock(unix_peek_lock)
        GC->>GC: raw_write_seqcount_barrier(unix_peek_seq)
        GC->>GC: spin_unlock(unix_peek_lock)
    end

    note over GC: later, GC run
    GC->>GC: __unix_gc()
    GC->>GC: gc_in_progress = true
    GC->>GC: unix_walk_scc()/unix_walk_scc_fast()

    loop per_SCC
        GC->>GC: unix_scc_dead(scc, fast)
        GC->>GC: seq = read_seqcount_begin(unix_peek_seq)
        GC->>GC: iterate vertices
        GC->>GC: scc_dead = unix_vertex_dead(vertex)
        GC->>GC: if !fast set vertex->index = unix_vertex_grouped_index
        GC->>GC: list_move_tail(vertex, unix_visited_vertices)
        GC->>GC: read_seqcount_retry(unix_peek_seq, seq)?
        alt MSG_PEEK intervened
            GC-->>GC: return false (defer SCC)
        else no_intervention
            alt scc_dead
                GC->>GC: unix_collect_skb(scc, hitlist)
            else not_dead
                GC->>GC: unix_scc_cyclic()
            end
        end
    end

    GC->>GC: gc_in_progress = false
    GC-->>Receiver: GC completes
Loading

Class diagram for MIPS R4K TLB uniquification pipeline

classDiagram
    class cpuinfo_mips {
        int vmbits
    }

    class tlbent {
        <<struct>>
        unsigned long long wired
        unsigned long long global
        unsigned long long asid
        unsigned long long vpn
        unsigned long long pagesz
        unsigned long long index
    }

    class tlb_r4k_helpers {
        +VPN2_SHIFT : int
        +read_c0_entryhi_native() unsigned long long
        +write_c0_entryhi_native(v unsigned long long) void
        +r4k_entry_cmp(a void*, b void*) int
        +r4k_tlb_uniquify_read(tlb_vpns tlbent*, tlbsize int) void
        +r4k_tlb_uniquify_write(tlb_vpns tlbent*, tlbsize int) void
        +r4k_tlb_uniquify() void
    }

    class mmu_hw_regs {
        +read_c0_entryhi() unsigned long
        +write_c0_entryhi(val unsigned long) void
        +read_c0_entryhi_64() unsigned long long
        +write_c0_entryhi_64(val unsigned long long) void
        +read_c0_pagemask() unsigned long long
        +write_c0_pagemask(val unsigned long long) void
        +write_c0_index(val unsigned int) void
        +read_c0_entrylo0() unsigned long long
    }

    class tlb_ops {
        +tlb_read() void
        +tlb_write_indexed() void
        +local_flush_tlb_all() void
        +dump_tlb_all() void
    }

    class cpu_has_flags {
        +cpu_has_64bits : bool
        +cpu_has_tlbinv : bool
    }

    class r4k_tlb_configure {
        +r4k_tlb_configure() void
    }

    cpuinfo_mips --> tlb_r4k_helpers : uses vmbits
    tlb_r4k_helpers --> tlbent : fills
    tlb_r4k_helpers --> mmu_hw_regs : reads_writes
    tlb_r4k_helpers --> tlb_ops : uses
    tlb_r4k_helpers --> cpu_has_flags : checks
    r4k_tlb_configure --> tlb_r4k_helpers : calls r4k_tlb_uniquify()
    r4k_tlb_configure --> cpu_has_flags : if !cpu_has_tlbinv
Loading

Class diagram for IPv6 Segment Routing lwtstate input/output caches

classDiagram
    class seg6_lwt {
        <<struct>>
        dst_cache cache_input
        dst_cache cache_output
        seg6_iptunnel_encap tuninfo[]
    }

    class dst_cache {
        <<struct>>
        +dst_cache_init(cache dst_cache*, gfp gfp_t) int
        +dst_cache_destroy(cache dst_cache*) void
        +dst_cache_get(cache dst_cache*) dst_entry*
        +dst_cache_set_ip6(cache dst_cache*, dst dst_entry*, addr in6_addr*) void
    }

    class seg6_input_core_fn {
        +seg6_input_core(net net*, sk sock*, skb sk_buff*, lwtst lwtunnel_state*) int
    }

    class seg6_output_core_fn {
        +seg6_output_core(net net*, sk sock*, skb sk_buff*) int
    }

    class seg6_build_state_fn {
        +seg6_build_state(net net*, nla nlattr*, ts lwtunnel_state**, cfg lwtunnel_encap_cfg*, extack netlink_ext_ack*) int
    }

    class seg6_destroy_state_fn {
        +seg6_destroy_state(lwt lwtunnel_state*) void
    }

    seg6_input_core_fn --> seg6_lwt : seg6_lwt_lwtunnel(lwtst)
    seg6_output_core_fn --> seg6_lwt : seg6_lwt_lwtunnel(orig_dst->lwtstate)
    seg6_build_state_fn --> seg6_lwt : alloc_embedded
    seg6_destroy_state_fn --> seg6_lwt : seg6_lwt_lwtunnel(lwt)

    seg6_input_core_fn --> dst_cache : cache_input.get,set_ip6
    seg6_output_core_fn --> dst_cache : cache_output.get,set_ip6

    seg6_build_state_fn --> dst_cache : init(cache_input)
    seg6_build_state_fn --> dst_cache : init(cache_output)
    seg6_destroy_state_fn --> dst_cache : destroy(cache_input)
    seg6_destroy_state_fn --> dst_cache : destroy(cache_output)
Loading

File-Level Changes

Change Details Files
Rework MIPS R4k TLB uniquification and virtual memory bit probing for correctness across 32/64-bit and CPU features
  • Introduce native 64-bit EntryHi read/write helpers and a VPN2_SHIFT constant
  • Replace simple VPN array with a structured tlbent table, split uniquification into read/sort/write phases, and sort entries by wired/global/VPN/ASID/page size
  • Mask VPNs with per-entry page masks, ignore 1KiB extension, and generate clash‑free 4KiB mappings while skipping wired and global entries
  • Skip uniquification when CPU supports TLB invalidation (cpu_has_tlbinv) and include new tlbdebug header
  • Generalize cpuinfo_mips.vmbits to be present on all builds and probe vmbits using 64-bit EntryHi when available, defaulting to 31 bits on non‑64‑bit and R3k
arch/mips/mm/tlb-r4k.c
arch/mips/kernel/cpu-probe.c
arch/mips/kernel/cpu-r3k-probe.c
arch/mips/include/asm/cpu-info.h
arch/mips/include/asm/mipsregs.h
arch/mips/include/asm/cpu-features.h
Tighten UNIX domain socket garbage collection and graph handling, especially around MSG_PEEK and SCC detection
  • Replace boolean unix_graph_maybe_cyclic/unix_graph_grouped flags with a tri‑state UNIX_GRAPH_* state and track number of cyclic SCCs
  • Add a seqcount and unix_peek_fpl() so MSG_PEEK on SCM fd lists can invalidate GC’s final refcount check and cause SCCs to be deferred
  • Factor SCC liveness checking into unix_scc_dead(), use unix_visited_vertices consistently, and propagate a cyclic_scc count from DFS and fast walk paths
  • Make unix GC choose between full and fast SCC walk based on unix_graph_state, and only run GC when the graph is maybe cyclic or cyclic
  • Hook unix_peek_fpl() from unix_peek_fds() so peeking participates in GC coordination
net/unix/garbage.c
net/unix/af_unix.c
net/unix/af_unix.h
Harden rxrpc/rxkad/rxgk security, key handling, and diagnostic output
  • Make all rxkad skcipher encrypt/decrypt paths check and propagate crypto errors instead of ignoring return values, aborting connections appropriately on failure
  • Ensure rxkad_secure_packet initializes variables, bails out early on crypto failure, and rxkad_decrypt_ticket aborts connection when decryption fails
  • Change rxkad response decryption to return errors instead of BUGing on setkey failure, and plumb those errors into response verification
  • Fix rxrpc key and call lifetime: track quotalen incrementally in parsers, allocate rxgk key storage using struct_size_t and cap key/ticket lengths with sanity checks
  • Ensure rxrpc calls are removed from connection list with list_del_rcu, drop call key references in destroy path, and relax setsockopt security-key rejection while keeping server keyring validation
  • Correct rxrpc connection response handling (state checks, choosing freshest response, freeing old responses) and ensure service‑challenging state transitions are serialized
  • Adjust rxgk authenticator and response verification to validate lengths carefully, use correct units, and release rxgk contexts via rxgk_put()
  • Extend rxrpc proc output buffer sizes, switch sprintf to scnprintf, and add a new reason counter (rxrpc_reqack_jumbo_win) with updated stats output and selection logic
  • Avoid double dev_put in xfrm input async paths and ensure device references are dropped on async completion or error; fix xfrm4/xfrm6 transport_finish to dev_put() when async
  • Improve tracing enums and rack timer logging to use correct mode and add a new skb_put_old_response tracepoint
net/rxrpc/rxkad.c
net/rxrpc/rxgk.c
net/rxrpc/key.c
net/rxrpc/proc.c
net/rxrpc/call_object.c
net/rxrpc/conn_event.c
net/rxrpc/io_thread.c
net/rxrpc/output.c
net/rxrpc/sendmsg.c
net/rxrpc/af_rxrpc.c
net/rxrpc/server_key.c
include/trace/events/rxrpc.h
net/rxrpc/ar-internal.h
net/xfrm/xfrm_input.c
net/ipv4/xfrm4_input.c
net/ipv6/xfrm6_input.c
Refine networking core and protocol behavior (MPTCP, SEG6, rfkill, nf_conntrack, TLS, TIPC, nft_ct, sockbuf)
  • Split seg6 lightweight tunnel dst_cache into separate input and output caches with proper init/destroy and use each in the corresponding path to avoid dst loops
  • Adjust MPTCP subflow initialization to split IPv4 and IPv6 setup (mptcp_subflow_init vs mptcp_subflow_v6_init) and ensure v6 subflow init is called from mptcp_proto_v6_init
  • Change MPTCP PM address management: always allocate an ID when missing, drop the needs_id parameter and helper, and enforce single rx->key vs rx->securities in rxrpc_request_key
  • Cap per‑fd rfkill event queue length with MAX_RFKILL_EVENT and track event_count under mutex, dropping events when overflowing and decrementing on read
  • Make nft_ct_timeout object destruction use kfree_rcu on the underlying timeout to avoid UAF under RCU
  • Fix nf_ct timeout object struct to embed an rcu_head for safe RCU freeing
  • Ensure TLS async encryption error paths don’t double‑decrement encrypt_pending and correctly remove failed records from the pending list
  • Update TIPC group ACK handling to ignore stale acks by checking bc_acked monotonicity
  • Change skb head freeing to always use kfree() instead of a small-head cache, simplifying skbuff head deallocation
net/ipv6/seg6_iptunnel.c
net/mptcp/subflow.c
net/mptcp/protocol.c
net/rfkill/core.c
net/netfilter/nft_ct.c
include/net/netfilter/nf_conntrack_timeout.h
net/tls/tls_sw.c
net/tipc/group.c
net/core/skbuff.c
Improve driver robustness and resource management across multiple subsystems (uinput, LAN966x, vub300, wireless, Ethernet, mlx5, NFC, I2C, EDAC, TPMI helpers)
  • In uinput, introduce a spinlock to protect device state, assert input_dev event_lock in event path, move state transitions under the spinlock, and ensure completions are initialized before potential completion paths
  • In lan966x FDMA, check page_pool_create() failure, destroy page pools on allocation errors, rework MTU reload to preserve and later free old pages, and ensure page_pool is destroyed on init failures
  • Fix vub300 MMC host lifetime: switch from devm_mmc_alloc_host to mmc_alloc_host, call mmc_free_host in delete paths and on probe errors, and adjust disconnect order
  • Correct DMA and page pool usage in various drivers: free DMA with proper size in brcmsmac, handle DMA mapping failures and free SKBs in altera_tse, destroy rx page pool on tx alloc failure in lan966x, and fix i2c-imx DMA slave config initialization
  • Fix resource allocation bugs: use usb_interface dev for rt2x00 anchor devm_kmalloc, increment RX error count and return full byte count in qca_uart, allocate recv_skb lazily and reset to NULL in pn533 UART, and ensure vub300 error unwinds free the mmc host
  • Add ConnectX-10 NVLink-C2C PCI ID to mlx5, remove an incorrect ALC897 pin fixup, and reconfigure HDMI block control clocking for HDCP on i.MX8MP
  • Ensure TPMI-based uncore-frequency and Intel SST TurboFreq helpers initialize and zero data structures correctly, gate elc_supported on autonomous UFS enablement, and clear bucket_core_counts
  • In EDAC, initialize device struct before allocating private data to avoid mci use before initialization
drivers/input/misc/uinput.c
drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c
drivers/mmc/host/vub300.c
drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c
drivers/net/wireless/ralink/rt2x00/rt2x00usb.c
drivers/net/ethernet/altera/altera_tse_main.c
drivers/net/ethernet/mellanox/mlx5/core/main.c
drivers/nfc/pn533/uart.c
drivers/i2c/busses/i2c-imx.c
drivers/edac/edac_mc.c
drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c
drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c
sound/hda/codecs/realtek/alc662.c
drivers/pmdomain/imx/imx8mp-blk-ctrl.c
drivers/firmware/thead,th1520-aon.c
Tighten memory management, DAMON, and Btrfs extent reference handling
  • In online_pages/offline_pages, maintain N_NORMAL_MEMORY node state consistently when adding or removing the last normal zone memory from a node, counting present_pages across zones when offlining
  • In DAMON stat/sysfs, rebuild or destroy stat context safely on enabling/disabling, avoid starting an already-running context, null out the global pointer on stop, and free repeat_call_control when damon_call fails
  • Fix Btrfs extent ref modification paths by simplifying error handling: return -ENOENT when extent data ref key not found, and return early on mod_ref failures instead of using a goto fail; bail out of free_tree_block early based on generation and pin state
  • Adjust filemap_map_pages to recompute end_pgoff from file size before walking page cache to avoid mapping beyond EOF under concurrent truncation
mm/memory_hotplug.c
mm/damon/stat.c
mm/damon/sysfs.c
fs/btrfs/extent-tree.c
mm/filemap.c
Refine ARM/x86 platform- and CPU-specific behavior (Zen1 FPDSS mitigation, TPMI, DTS)
  • Add AMD MSR_AMD64_FP_CFG and program its ZEN1_DENORM_FIX bit in init_amd_zen1(), printing a one-time notice about enabling the FPDSS bug mitigation
  • Update TPMI-based Intel uncore-frequency and SST code as noted above, including masking autonomous UFS disable and correctly setting elc_supported
  • Include DTS updates for several ARM64 boards (Librem5, HiSilicon hi3798cv200, Renesas r8a779g3 Sparrow Hawk, RK3399 Pinebook Pro) to align with upstream v6.18.23, though the functional diff is not shown here
arch/x86/include/asm/msr-index.h
arch/x86/kernel/cpu/amd.c
drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c
drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c
arch/arm64/boot/dts/freescale/imx8mq-librem5*.dts
arch/arm64/boot/dts/hisilicon/hi3798cv200*.dts
arch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts
Adjust misc core and build plumbing (Makefile version, X.509 parsing, X.509, modpost)
  • Bump kernel SUBLEVEL from 22 to 23 in the top-level Makefile
  • Harden X.509 keyUsage and basicConstraints extension parsing by checking vlen before verifying tag bytes and ensuring lengths are consistent
  • Drop an unused extra_warn modpost global (mark it attribute((unused))) to silence compiler warnings
  • Simplify Thead TH1520 AON firmware message layout by replacing custom RPC_SET_* byte macros with cpu_to_be16() fields in the struct
Makefile
crypto/asymmetric_keys/x509_cert_parser.c
scripts/mod/modpost.c
include/linux/firmware/thead/thead,th1520-aon.h
drivers/firmware/thead,th1520-aon.c

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Copy Markdown

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates the Deepin 6.18.y kernel tree to upstream v6.18.23, pulling in a broad set of upstream fixes and cleanups across networking, MM, filesystems, drivers, and multiple architectures.

Changes:

  • Bump kernel sublevel to 6.18.23 and integrate upstream fixes across core subsystems.
  • Apply multiple networking hardening/fixups (AF_UNIX GC, XFRM/TLS/RXRPC/TIPC/MPTCP, netdrivers).
  • Apply assorted MM/FS/driver/arch stability fixes (hotplug, DAMON, Btrfs, device drivers, MIPS/x86 changes, DTS updates).

Reviewed changes

Copilot reviewed 81 out of 81 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
sound/hda/codecs/realtek/alc662.c Drop one board-specific ALC897 quirk
scripts/mod/modpost.c Silence unused variable warning
net/xfrm/xfrm_user.c Zero padding / init netlink structs
net/xfrm/xfrm_input.c Fix async device ref handling
net/unix/garbage.c AF_UNIX GC race/cycle handling updates
net/unix/af_unix.h Export unix_peek_fpl() prototype
net/unix/af_unix.c Call unix_peek_fpl() on MSG_PEEK
net/tls/tls_sw.c Fix async encryption error cleanup path
net/tipc/group.c Ignore stale group ACKs
net/rxrpc/server_key.c Reject keyring set when already configured
net/rxrpc/sendmsg.c Use resolved key for client call params
net/rxrpc/rxkad.c Propagate crypto errors; tighten handling
net/rxrpc/rxgk.c Bounds checks and length validation fixes
net/rxrpc/proc.c Safer address formatting + stat extension
net/rxrpc/output.c Add jumbo-window reqack reason
net/rxrpc/key.c Harden token parsing/quotas; overflow-safe alloc
net/rxrpc/io_thread.c Guard rxrpc_put_call() on NULL
net/rxrpc/input_rack.c Fix warning to log correct mode
net/rxrpc/conn_event.c Fix response handling + skb lifetime
net/rxrpc/call_object.c RCU-safe call list removal; key_put on destroy
net/rxrpc/ar-internal.h Extend stat_why_req_ack array size
net/rxrpc/af_rxrpc.c Adjust setsockopt key/keyring checks
net/rfkill/core.c Bound in-flight rfkill events per reader
net/netfilter/nft_ct.c Free timeout object with kfree_rcu()
net/mptcp/subflow.c Split IPv6 init; register ULP earlier
net/mptcp/protocol.h Add mptcp_subflow_v6_init() declaration
net/mptcp/protocol.c Call new IPv6 subflow init hook
net/mptcp/pm_kernel.c Simplify endpoint ID assignment logic
net/ipv6/xfrm6_input.c Fix async dev ref put in transport finish
net/ipv6/seg6_iptunnel.c Split input/output dst caches; fix cleanup
net/ipv4/xfrm4_input.c Fix async dev ref put in transport finish
net/core/skbuff.c Simplify skb head free path
net/batman-adv/translation-table.c Add length overflow checks
net/batman-adv/bridge_loop_avoidance.c Fix backbone gw ref handling
mm/memory_hotplug.c Track N_NORMAL_MEMORY state transitions
mm/filemap.c Avoid truncation race during map_pages
mm/damon/sysfs.c Free repeat control on damon_call failure
mm/damon/stat.c Correct context lifecycle + reset pointer
kernel/workqueue.c Restore pending state when unplugging pwq
include/trace/events/rxrpc.h Add new trace enums / reqack reason
include/net/netfilter/nf_conntrack_timeout.h Add rcu_head to nf_ct_timeout
include/linux/firmware/thead/thead,th1520-aon.h Remove ad-hoc endian RPC macros
fs/btrfs/extent-tree.c Return early on ref mismatch/errors
drivers/usb/typec/ucsi/ucsi.c Handle zero connector count defensively
drivers/pmdomain/imx/imx8mp-blk-ctrl.c HDMI clock bit handling adjustment
drivers/platform/x86/intel/uncore-frequency/uncore-frequency-tpmi.c Respect autonomous UFS disable flag
drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c Zero-init turbo bucket array
drivers/nfc/pn533/uart.c Fix recv skb allocation/lifetime handling
drivers/net/wireless/ralink/rt2x00/rt2x00usb.c Fix devm allocation device pointer
drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c Fix DMA free size parameter
drivers/net/ethernet/stmicro/stmmac/chain_mode.c Correct jumbo buffer mapping length
drivers/net/ethernet/qualcomm/qca_uart.c Return correct consumed byte count
drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c Fix page_pool/MTU reload error paths
drivers/net/ethernet/mellanox/mlx5/core/main.c Add new PCI ID
drivers/net/ethernet/intel/igb/igb_main.c Adjust NAPI disable ordering
drivers/net/ethernet/intel/idpf/idpf_virtchnl.h Add transaction lock field
drivers/net/ethernet/intel/idpf/idpf_virtchnl.c Use dedicated spinlock; async reply size
drivers/net/ethernet/altera/altera_tse_main.c Free skb on DMA mapping error
drivers/mmc/host/vub300.c Fix host lifetime + disconnect ordering
drivers/input/misc/uinput.c Fix request lifetime/state locking
drivers/i2c/busses/i2c-imx.c Zero-init dma_slave_config
drivers/gpu/drm/i915/gt/intel_engine_heartbeat.c Fix systole request lifetime races
drivers/gpu/drm/i915/display/intel_psr.c Use full display area for damage tracking
drivers/firmware/thead,th1520-aon.c Use cpu_to_be16 for RPC fields
drivers/edac/edac_mc.c Initialize device before pvt alloc
crypto/asymmetric_keys/x509_cert_parser.c Fix extension length/type checks order
arch/x86/kernel/cpu/amd.c Add Zen1 FPDSS mitigation enablement
arch/x86/include/asm/msr-index.h Define MSR_AMD64_FP_CFG + bit
arch/mips/mm/tlb-r4k.c Rework TLB uniquification logic
arch/mips/kernel/cpu-r3k-probe.c Set vmbits for R3K
arch/mips/kernel/cpu-probe.c Probe vmbits safely for 64-bit CPUs
arch/mips/include/asm/mipsregs.h Add 64-bit EntryHi accessors
arch/mips/include/asm/cpu-info.h Make vmbits available on 32-bit too
arch/mips/include/asm/cpu-features.h Remove legacy vmbits probe define
arch/arm64/boot/dts/rockchip/rk3399-pinebook-pro.dts Remove WiFi node/pinctrl block
arch/arm64/boot/dts/renesas/r8a779g3-sparrow-hawk.dts Add reserved-memory TFA region
arch/arm64/boot/dts/hisilicon/hi3798cv200.dtsi Add dma-ranges
arch/arm64/boot/dts/hisilicon/hi3798cv200-poplar.dts Fix PCIe reset GPIO polarity
arch/arm64/boot/dts/freescale/imx8mq-librem5.dtsi Adjust PMIC voltages; drop OPP override
arch/arm64/boot/dts/freescale/imx8mq-librem5-r3.dts Update OPP microvolt
Makefile Bump sublevel to 6.18.23

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread net/rfkill/core.c
Comment on lines +280 to +286
scoped_guard(mutex, &data->mtx) {
if (data->event_count++ > MAX_RFKILL_EVENT) {
data->event_count--;
return -ENOSPC;
}
list_add_tail(&int_ev->list, &data->events);
}
Copy link

Copilot AI Apr 21, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The MAX_RFKILL_EVENT bound check is off by one: using if (data->event_count++ > MAX_RFKILL_EVENT) allows event_count to reach MAX_RFKILL_EVENT + 1 (e.g., when it was exactly MAX_RFKILL_EVENT before the increment). If the intent is to cap in-flight events at 1000, use a >= check (or increment only after passing the check) so the maximum is enforced correctly.

Copilot uses AI. Check for mistakes.
@deepin-ci-robot
Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please ask for approval from opsiff. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.