The Linux Kernel, the operating system core itself.
Security Fix(es):
In the Linux kernel, the following vulnerability has been resolved:
inet: RAW sockets using IPPROTO_RAW MUST drop incoming ICMP
Yizhou Zhao reported that simply having one RAW socket on protocol IPPROTO_RAW (255) was dangerous.
socket(AFINET, SOCKRAW, 255);
A malicious incoming ICMP packet can set the protocol field to 255 and match this socket, leading to FNHE cache changes.
inner = IP(src="192.168.2.1", dst="8.8.8.8", proto=255)/Raw("TEST") pkt = IP(src="192.168.1.1", dst="192.168.2.1")/ICMP(type=3, code=4, nexthopmtu=576)/inner
"man 7 raw" states:
A protocol of IPPROTORAW implies enabled IPHDRINCL and is able to send any IP protocol that is specified in the passed header. Receiving of all IP protocols via IPPROTO_RAW is not possible using raw sockets.
Make sure we drop these malicious packets.(CVE-2026-46266)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: xt_policy: fix strict mode inbound policy matching
matchpolicyin() walks sec_path entries from the last transform to the first one, but strict policy matching needs to consume info->pol[] in the same forward order as the rule layout.
Derive the strict-match policy position from the number of transforms already consumed so that multi-element inbound rules are matched consistently.(CVE-2026-52920)
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nf_log: validate MAC header was set before dumping it
The fallback path of dumpmacheader() guards the MAC header access only with "skb->macheader != skb->networkheader", without checking skbmacheaderwasset(). When the MAC header is unset, macheader is 0xffff, so the test passes and skbmacheader(skb) returns skb->head + 0xffff, ~64 KiB past the buffer; the loop then reads dev->hardheader_len bytes out of bounds into the kernel log.
This is reachable via the netdev logger: nflogunknownpacket() calls dumpmacheader() unconditionally, and an skb sent through AFPACKET with PACKETQDISCBYPASS reaches the egress hook with mac_header still unset (__devqueuexmit(), which would reset it, is bypassed).
Add the skbmacheaderwasset() check the ARPHRDETHER path already uses, and replace the open-coded MAC header length test with skbmacheaderlen(). Only skbs with an unset MAC header are affected; valid ones are dumped as before.
BUG: KASAN: slab-out-of-bounds in dumpmacheader (net/netfilter/nflogsyslog.c:831) Read of size 1 at addr ffff88800ea49d3f by task exploit/148 Call Trace: kasanreport (mm/kasan/report.c:595) dumpmacheader (net/netfilter/nflogsyslog.c:831) nflognetdevpacket (net/netfilter/nflogsyslog.c:938 net/netfilter/nflogsyslog.c:963) nflogpacket (net/netfilter/nflog.c:260) nftlogeval (net/netfilter/nftlog.c:60) nftdochain (net/netfilter/nftablescore.c:285) nftdochainnetdev (net/netfilter/nftchainfilter.c:307) nfhookslow (net/netfilter/core.c:619) nfhookdirectegress (net/packet/afpacket.c:257) packetxmit (net/packet/afpacket.c:280) packetsendmsg (net/packet/af_packet.c:3114) _syssendto (net/socket.c:2265)(CVE-2026-52942)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/srp: bound SRP_RSP sense copy by the received length
srpprocessrsp() copies sense data from rsp->data + respdatalen, where respdatalen is the full 32-bit value supplied by the SRP target and is never checked against the number of bytes actually received (wc->bytelen). The copy length is bounded to SCSISENSE_BUFFERSIZE, so at most 96 bytes are copied, but the source offset is not bounded.
A malicious or compromised SRP target on the InfiniBand/RoCE fabric that the initiator has logged into can return an SRPRSP with SRPRSPFLAGSNSVALID set and a large respdatalen. The receive buffer is allocated at the target-chosen maxtiiulen, so the source of the sense copy lands past the bytes actually received; with respdata_len near 0xFFFFFFFF it is gigabytes past the buffer and the read faults.
Copy the sense data only if it has not been truncated, that is, only if the response header, the response data, and the sense region fit within the bytes actually received; otherwise drop the sense and log. The in-tree iSER and NVMe-RDMA receive paths already bound their parse by wc->bytelen; this brings ibsrp into line with them.(CVE-2026-53186)
In the Linux kernel, the following vulnerability has been resolved:
sctp: validate cached peer INIT chunk length in COOKIE_ECHO processing
When a listening SCTP server processes a COOKIEECHO chunk, the cached peer INIT chunk embedded after the cookie is parsed and its parameters are later walked by sctpprocessinit() using sctpwalk_params().
However, the chunk header length of this cached INIT chunk was not validated against the remaining buffer in the COOKIEECHO payload. If the length field is inflated, the parameter walk can run beyond the actual received data, leading to out-of-bounds reads and potential memory corruption during later parameter handling (e.g. STATECOOKIE processing and kmemdup() copies).
Add a bounds check in sctpunpackcookie() to ensure the cached INIT chunk length does not exceed the available data in the COOKIE_ECHO buffer before it is used.(CVE-2026-53246)
In the Linux kernel, the following vulnerability has been resolved:
fuse: re-lock request before replacing page cache folio
fusetrymovefolio() unlocks the request on entry but does not re-lock it on the success path. This means fusechanabort() can end the request and free the fuseioargs (eg fusereadpagesend()) while the subsequent copy chain logic after fusetrymovefolio() accesses the fuseioargs, leading to use-after-free issues.
Fix this by calling lockrequest() before replacepagecachefolio(). This ensures the request is locked on the success path which will prevent the fuseioargs from being freed while the later copying logic runs, and also ensures that the ap->folios[i]->mapping is never null since ap->folios[i] will always point to the newfolio after replacepagecache_folio().(CVE-2026-53388)
In the Linux kernel, the following vulnerability has been resolved:
scsi: target: iscsi: Bound iscsiencodetextoutput() appends to rspbuf
iscsiencodetextoutput() concatenates "key=value\0" records into login->rspbuf, an 8192-byte kzalloc(MAXKEYVALUEPAIRS) buffer allocated in iscsitallocloginsetup_buffer(). The three sprintf() call sites in this function (lines 1398, 1411, 1424 in v7.1-rc2) never check the remaining buffer capacity:
*length += sprintf(output_buf, "%s=%s", er->key, er->value);
*length += 1;
output_buf = textbuf + *length;
The 8192-byte ceiling at iscsitargetcheckloginrequest() bounds the input Login PDU payload, but a single PDU can carry up to 2048 minimal four-byte "a=b\0" pairs, each unknown key expanding to a 16-byte "a=NotUnderstood\0" output record via iscsiaddnotunderstood_response(). 2048 * 16 = 32 KiB of output into an 8 KiB buffer, producing a ~24 KiB heap overrun in the kmalloc-8k slab.
The fix introduces a static iscsiencodetextrecord() helper that uses snprintf() with a per-call bounds check against the remaining buffer, and threads a u32 textbufsize parameter through iscsiencodetextoutput(). Both call sites in iscsitargethandlecsgzero() (PHASESECURITY) and iscsitargethandlecsgone() (PHASEOPERATIONAL) pass MAXKEYVALUEPAIRS. On overflow the encoder logs the condition, calls iscsireleaseextraresponses() to drop queued records, and returns -1; both caller sites now emit ISCSISTATUSCLSINITIATORERR / ISCSILOGINSTATUSINITERR via iscsittxloginrsp() before returning, so the initiator sees an explicit failed-login response rather than a silent connection drop. (Prior to this patch only the PHASEOPERATIONAL caller did that; the PHASESECURITY caller is converted to the same shape.)(CVE-2026-63887)
In the Linux kernel, the following vulnerability has been resolved:
scsi: target: iscsi: Fix CRC overread and double-free in iscsithandletext_cmd()
Two latent bugs in the Text-phase handler, both present since the original LIO integration in commit e48354ce078c ("iscsi-target: Add iSCSI fabric support for target v4.1"):
1) DataDigest CRC buffer overread (4 bytes past text_in).
textin is kzalloc()'d at ALIGN(payloadlength, 4). rxsize is then incremented by ISCSICRCLEN to make room for the received DataDigest in the iovec, but the same (now-bumped) rxsize is passed as the buffer length to iscsitcrcbuf():
if (conn->conn_ops->DataDigest) {
...
rx_size += ISCSI_CRC_LEN;
}
...
if (conn->conn_ops->DataDigest) {
data_crc = iscsit_crc_buf(text_in, rx_size, 0, NULL);
iscsitcrcbuf() walks rxsize bytes of textin with crc32c(), so when DataDigest is negotiated it reads 4 bytes past the end of the text_in allocation. KASAN reproduces this directly on the unpatched mainline tree as slab-out-of-bounds in crc32c() called from the Text PDU path. The OOB bytes feed crc32c() and are then compared against the initiator-supplied checksum, so the value does not flow back to the attacker, but the kernel does read past the buffer on every Text PDU with DataDigest=CRC32C.
Fix by passing the actual padded payload length (ALIGN(payload_length, 4)) that was used for the kzalloc().
2) Stale cmd->textinptr re-free (double-free) on ERL>0 bad DataDigest drop.
On DataDigest mismatch with ErrorRecoveryLevel > 0 the handler silently drops the PDU and lets the initiator plug the CmdSN gap:
kfree(text_in);
return 0;
cmd->textinptr still points at the freed buffer. The next Text Request on the same ITT re-enters iscsitsetuptext_cmd(), which unconditionally does
kfree(cmd->text_in_ptr);
cmd->text_in_ptr = NULL;
freeing the same pointer a second time. Session teardown via iscsitreleasecmd() has the same shape and hits the same double-free if the connection is dropped before a second Text Request arrives.
On an unmodified mainline tree the bug-1 CRC overread fires first on the initial valid Text Request and perturbs the subsequent state, so #4 was isolated by building a kernel with only the bug-1 hunk of this patch applied plus temporary printk() observability around the three relevant kfree() sites. The observability prints are not part of this patch. On that build, a three-PDU Text Request sequence after login produces two back-to-back splats:
BUG: KASAN: double-free in iscsit_setup_text_cmd+0x??
BUG: KASAN: double-free in iscsit_release_cmd+0x??
showing the same pointer freed in the ERL>0 drop path and again in iscsitsetuptextcmd() (next Text Request on the same ITT) and once more in iscsitreleasecmd() (session teardown). On distro kernels with CONFIGSLABFREELISTHARDENED=y (default) the double-free becomes a remote kernel BUG(); on non-hardened kernels it corrupts the slab freelist.
Fix by clearing cmd->textinptr after the kfree() in the ERL>0 drop path. With both hunks applied #4 is directly observable on the stock tree without observability printks; fixing bug-1 alone would mask #4 less, not more, so the hunks are submitted together.
Both fixes are one-liners. The Text PDU state machine is unchanged and the wire protocol is unaffected.(CVE-2026-63888)
In the Linux kernel, the following vulnerability has been resolved:
writeback: fix race between cgroupwritebackumount() and inodeswitchwbs()
When a container exits, the following BUG_ON() is occasionally triggered:
================================================================== VFS: Busy inodes after unmount of sdb (ext4) ------------[ cut here ]------------ kernel BUG at fs/super.c:695! CPU: 3 PID: 6 Comm: containerd-shim Tainted: G OE K 6.6 #1 pstate: 63400009 (nZCv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--) pc : genericshutdownsuper+0xf0/0x100 lr : genericshutdownsuper+0xf0/0x100 Call trace: genericshutdownsuper+0xf0/0x100 killblocksuper+0x20/0x48 ext4killsb+0x28/0x60 deactivatelockedsuper+0x54/0x130 deactivatesuper+0x84/0xa0 cleanupmnt+0xa4/0x140 _cleanupmnt+0x18/0x28 taskworkrun+0x78/0xe0
The root cause is a race between cgroupwritebackumount() and inodeswitchwbs()/cleanupofflinecgwb(). There is a window between inodepreparewbsswitch() returning true and the subsequent wbqueue_isw() call. Following is the process that triggers the issue:
CPU A (umount) | CPU B (writeback)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ inodeswitchwbs/cleanupofflinecgwb atomicinc(&iswnrinflight) inodepreparewbsswitch -> passes SBACTIVE check _iget(inode) genericshutdownsuper sb->sflags &= ~SBACTIVE cgroupwritebackumount(sb) smpmb() atomicread(&iswnrinflight) rcubarrier() -> no pending RCU callbacks flushworkqueue(iswwq) -> nothing queued, returns evictinodes(sb) -> Inode skipped as isw still holds a ref. sop->putsuper(sb) /* destroys percpu counters */ -> VFS: Busy inodes after unmount! wbqueueisw() queuework(iswwq, ...) /* later in work function */ inodeswitchwbsworkfn processinodeswitchwbs iput() -> evict percpucounterdec() // UAF!
Fix this by extending the RCU read-side critical section in inodeswitchwbs() and cleanupofflinecgwb() to cover from inodepreparewbsswitch() through wbqueueisw(). Since there is no sleep in this window, rcureadlock() can be used. Then add a synchronizercu() in cgroupwritebackumount() before the existing rcubarrier(), so that all in-flight switchers that have passed the SBACTIVE check have completed queuework() before flushworkqueue() is called.
The existing rcubarrier() is intentionally retained so this fix can be backported unchanged to stable kernels (5.10.y, 6.6.y, ...) that still queue switches via queuercuwork(). It is a no-op on current mainline (since commit e1b849cfa6b6 ("writeback: Avoid contention on wb->listlock when switching inodes")) and is removed in a follow-up patch.(CVE-2026-64378)
{
"severity": "Critical"
}{
"x86_64": [
"bpftool-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"bpftool-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"kernel-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"kernel-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"kernel-debugsource-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"kernel-devel-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"kernel-source-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"kernel-tools-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"kernel-tools-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"kernel-tools-devel-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"perf-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"perf-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"python2-perf-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"python2-perf-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"python3-perf-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm",
"python3-perf-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.x86_64.rpm"
],
"src": [
"kernel-4.19.90-2608.2.0.0384.oe2003sp4.src.rpm"
],
"aarch64": [
"bpftool-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"bpftool-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"kernel-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"kernel-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"kernel-debugsource-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"kernel-devel-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"kernel-source-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"kernel-tools-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"kernel-tools-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"kernel-tools-devel-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"perf-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"perf-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"python2-perf-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"python2-perf-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"python3-perf-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm",
"python3-perf-debuginfo-4.19.90-2608.2.0.0384.oe2003sp4.aarch64.rpm"
]
}