The Linux Kernel, the operating system core itself.
Security Fix(es):
In the Linux kernel, the following vulnerability has been resolved:
udptunnel: fix NULL deref caused by udpsockcreate6 when CONFIGIPV6=n
When CONFIGIPV6 is disabled, the udpsockcreate6() function returns 0 (success) without actually creating a socket. Callers such as foucreate() then proceed to dereference the uninitialized socket pointer, resulting in a NULL pointer dereference.
The captured NULL deref crash: BUG: kernel NULL pointer dereference, address: 0000000000000018 RIP: 0010:founladddoit (net/ipv4/foucore.c:590 net/ipv4/foucore.c:764) [...] Call Trace: <TASK> genlfamilyrcvmsgdoit.constprop.0 (net/netlink/genetlink.c:1114) genlrcvmsg (net/netlink/genetlink.c:1194 net/netlink/genetlink.c:1209) [...] netlinkrcvskb (net/netlink/afnetlink.c:2550) genlrcv (net/netlink/genetlink.c:1219) netlinkunicast (net/netlink/afnetlink.c:1319 net/netlink/afnetlink.c:1344) netlinksendmsg (net/netlink/afnetlink.c:1894) __sock_sendmsg (net/socket.c:727 (discriminator 1) net/socket.c:742 (discriminator 1)) __sys_sendto (./include/linux/file.h:62 (discriminator 1) ./include/linux/file.h:83 (discriminator 1) net/socket.c:2183 (discriminator 1)) _x64syssendto (net/socket.c:2213 (discriminator 1) net/socket.c:2209 (discriminator 1) net/socket.c:2209 (discriminator 1)) dosyscall64 (arch/x86/entry/syscall64.c:63 (discriminator 1) arch/x86/entry/syscall64.c:94 (discriminator 1)) entrySYSCALL64afterhwframe (net/arch/x86/entry/entry64.S:130)
This patch makes udpsockcreate6 return -EPFNOSUPPORT instead, so callers correctly take their error paths. There is only one caller of the vulnerable function and only privileged users can trigger it.(CVE-2026-23439)
In the Linux kernel, the following vulnerability has been resolved:
net/smc: fix NULL dereference and UAF in smctcpsynrecvsock()
Syzkaller reported a panic in smctcpsynrecvsock() [1].
smctcpsynrecvsock() is called in the TCP receive path (softirq) via icskafops->synrecvsock on the clcsock (TCP listening socket). It reads skuserdata to get the smcsock pointer. However, when the SMC listen socket is being closed concurrently, smccloseactive() sets clcsock->skuserdata to NULL under skcallbacklock, and then the smcsock itself can be freed via sockput() in smcrelease().
This leads to two issues:
1) NULL pointer dereference: skuserdata is NULL when accessed. 2) Use-after-free: skuserdata is read as non-NULL, but the smcsock is freed before its fields (e.g., queuedsmchs, oriaf_ops) are accessed.
The race window looks like this (the syzkaller crash [1] triggers via the SYN cookie path: tcpgetcookiesock() -> smctcpsynrecvsock(), but the normal tcpcheck_req() path has the same race):
CPU A (softirq) CPU B (process ctx)
tcpv4rcv() TCPNEWSYNRECV: sk = req->rsklistener sockhold(sk) /* No lock on listener */ smccloseactive(): writelockbh(cblock) skuserdata = NULL writeunlockbh(cblock) ... smcclcsockrelease() sockput(smc->sk) x2 -> smcsock freed! tcpcheckreq() smctcpsynrecvsock(): smc = userdata(sk) -> NULL or dangling smc->queuedsmchs -> crash!
Note that the clcsock and smcsock are two independent objects with separate refcounts. TCP stack holds a reference on the clcsock, which keeps it alive, but this does NOT prevent the smcsock from being freed.
Fix this by using RCU and refcountincnotzero() to safely access smcsock. Since smctcpsynrecvsock() is called in the TCP three-way handshake path, taking readlockbh on skcallbacklock is too heavy and would not survive a SYN flood attack. Using rcureadlock() is much more lightweight.
Note: smchscongested() has a similar lockless read of skuserdata without rcureadlock(), but it only checks for NULL and accesses the global smchswq, never dereferencing any smc_sock field, so it is not affected.
Reproducer was verified with mdelay injection and smc_run, the issue no longer occurs with this patch applied.
[1] https://syzkaller.appspot.com/bug?extid=827ae2bfb3a3529333e9(CVE-2026-23450)
In the Linux kernel, a memory leak vulnerability has been identified in the sunrpc subsystem. When a reader's file descriptor is closed while in the middle of reading a cacherequest (rp->offset != 0), cacherelease() decrements the request's readers count but never checks whether it should free the request.
In cacheread(), when readers drops to 0 and CACHEPENDING is clear, the cacherequest is removed from the queue and freed along with its buffer and cachehead reference. cache_release() lacks this cleanup.
The only other path that frees requests with readers == 0 is cachedequeue(), but it runs only when CACHEPENDING transitions from set to clear. If that transition already happened while readers was still non-zero, cache_dequeue() will have skipped the request, and no subsequent call will clean it up.
The solution is to add the same cleanup logic from cacheread() to cacherelease(): after decrementing readers, check if it reached 0 with CACHEPENDING clear, and if so, dequeue and free the cacherequest.(CVE-2026-31400)
In the Linux kernel, the following vulnerability has been resolved:
nfsd: fix heap overflow in NFSv4.0 LOCK replay cache
The NFSv4.0 replay cache uses a fixed 112-byte inline buffer (rpibuf[NFSD4REPLAYISIZE]) to store encoded operation responses. This size was calculated based on OPEN responses and does not account for LOCK denied responses, which include the conflicting lock owner as a variable-length field up to 1024 bytes (NFS4OPAQUE_LIMIT).
When a LOCK operation is denied due to a conflict with an existing lock that has a large owner, nfsd4encodeoperation() copies the full encoded response into the undersized replay buffer via readbytesfromxdrbuf() with no bounds check. This results in a slab-out-of-bounds write of up to 944 bytes past the end of the buffer, corrupting adjacent heap memory.
This can be triggered remotely by an unauthenticated attacker with two cooperating NFSv4.0 clients: one sets a lock with a large owner string, then the other requests a conflicting lock to provoke the denial.
We could fix this by increasing NFSD4REPLAYISIZE to allow for a full opaque, but that would increase the size of every stateowner, when most lockowners are not that large.
Instead, fix this by checking the encoded response length against NFSD4REPLAYISIZE before copying into the replay buffer. If the response is too large, set rp_buflen to 0 to skip caching the replay payload. The status is still cached, and the client already received the correct response on the original request.(CVE-2026-31402)
In the Linux kernel, the following vulnerability has been resolved: NFSD: Hold net reference for the lifetime of /proc/fs/nfs/exports fd. The /proc/fs/nfs/exports proc entry is created at module init and persists for the module's lifetime. exportsprocopen() captures the caller's current network namespace and stores its svcexportcache in seq->private, but takes no reference on the namespace. If the namespace is subsequently torn down (e.g. container destruction after the opener does setns() to a different namespace), nfsdnetexit() calls nfsdexportshutdown() which frees the cache. Subsequent reads on the still-open fd dereference the freed cachedetail, walking a freed hash table. Hold a reference on the struct net for the lifetime of the open file descriptor. This prevents nfsdnetexit() from running -- and thus prevents nfsdexportshutdown() from freeing the cache -- while any exports fd is open. cachedetail already stores its net pointer (cd->net, set by cachecreatenet()), so exports_release() can retrieve it without additional per-file storage.(CVE-2026-31403)
In the Linux kernel, the following vulnerability has been resolved:
ACPI: EC: clean up handlers on probe failure in acpiecsetup()
When ecinstallhandlers() returns -EPROBEDEFER on reduced-hardware platforms, it has already started the EC and installed the address space handler with the struct acpiec pointer as handler context. However, acpiecsetup() propagates the error without any cleanup.
The caller acpiecadd() then frees the struct acpi_ec for non-boot instances, leaving a dangling handler context in ACPICA.
Any subsequent AML evaluation that accesses an EC OpRegion field dispatches into acpiecspace_handler() with the freed pointer, causing a use-after-free:
BUG: KASAN: slab-use-after-free in mutexlock (kernel/locking/mutex.c:289) Write of size 8 at addr ffff88800721de38 by task init/1 Call Trace: <TASK> mutexlock (kernel/locking/mutex.c:289) acpiecspacehandler (drivers/acpi/ec.c:1362) acpievaddressspacedispatch (drivers/acpi/acpica/evregion.c:293) acpiexaccessregion (drivers/acpi/acpica/exfldio.c:246) acpiexfielddatumio (drivers/acpi/acpica/exfldio.c:509) acpiexextractfromfield (drivers/acpi/acpica/exfldio.c:700) acpiexreaddatafromfield (drivers/acpi/acpica/exfield.c:327) acpiexresolvenodetovalue (drivers/acpi/acpica/exresolv.c:392) </TASK>
Allocated by task 1: acpiecalloc (drivers/acpi/ec.c:1424) acpiecadd (drivers/acpi/ec.c:1692)
Freed by task 1: kfree (mm/slub.c:6876) acpiecadd (drivers/acpi/ec.c:1751)
The bug triggers on reduced-hardware EC platforms (ec->gpe < 0) when the GPIO IRQ provider defers probing. Once the stale handler exists, any unprivileged sysfs read that causes AML to touch an EC OpRegion (battery, thermal, backlight) exercises the dangling pointer.
Fix this by calling ecremovehandlers() in the error path of acpiecsetup() before clearing firstec. ecremovehandlers() checks each ECFLAGS_* bit before acting, so it is safe to call regardless of how far ecinstallhandlers() progressed:
-ENODEV (handler not installed): only calls acpiecstop() -EPROBE_DEFER (handler installed): removes handler, stops EC(CVE-2026-31426)
{
"severity": "High"
}{
"src": [
"kernel-6.6.0-145.0.4.144.oe2403sp1.src.rpm"
],
"x86_64": [
"bpftool-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"bpftool-debuginfo-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"kernel-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"kernel-debuginfo-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"kernel-debugsource-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"kernel-devel-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"kernel-headers-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"kernel-source-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"kernel-tools-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"kernel-tools-debuginfo-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"kernel-tools-devel-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"perf-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"perf-debuginfo-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"python3-perf-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm",
"python3-perf-debuginfo-6.6.0-145.0.4.144.oe2403sp1.x86_64.rpm"
],
"aarch64": [
"bpftool-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"bpftool-debuginfo-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"kernel-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"kernel-debuginfo-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"kernel-debugsource-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"kernel-devel-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"kernel-headers-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"kernel-source-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"kernel-tools-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"kernel-tools-debuginfo-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"kernel-tools-devel-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"perf-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"perf-debuginfo-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"python3-perf-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm",
"python3-perf-debuginfo-6.6.0-145.0.4.144.oe2403sp1.aarch64.rpm"
]
}