Look up another CVE · open CVE-2026-81003 in the interactive tracker
CVE-2026-81003
net/iucv: filter frames in afiucv_hs_rcv() by ingress device
Published 2026-09-11 (37 days ago) by the Linux kernel CNA. Subsystem net/iucv. Debian urgency: not yet assigned.
What to do, per Debian release
Debian's own status for CVE-2026-81003 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source
| Release | Status | Version | What this means |
|---|---|---|---|
| Debian 12bookworm | fixedDLA-4841-1 · 2026-10-17 · text | 6.1.190-1 | Update the kernel and reboot. DLA-4841-1 shipped the fix on 2026-10-17, in 6.1.190-1. A running kernel keeps the old code until the machine restarts. |
| Debian 13trixie | fixedDSA-6528-1 · 2026-09-29 · text | 6.12.111-1 | Update the kernel and reboot. DSA-6528-1 shipped the fix on 2026-09-29, in 6.12.111-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.2.6-1 | Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts. |
| Debian 12bookworm · linux-6.12 | fixedDLA-4817-1 · 2026-10-04 · text | 6.12.111-1~deb12u1 | Update the kernel and reboot. DLA-4817-1 shipped the fix on 2026-10-04, in 6.12.111-1~deb12u1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
afiucv_hs_rcv() selects a socket from iucv_sk_list by matching four 8-byte name fields in the transport header alone. No check is made against the net_device the frame arrived on. This can cause a frame arriving on any netdev to be delivered to an AF_IUCV socket. Three problems follow. First, a frame arriving over HiperSockets can be delivered to a socket bound to the classic z/VM IUCV transport, which has iucv->hs_dev == NULL. iucv_sock_bind() takes the classic path whenever the requested userid matches iucv_userid, even on a guest that also has a HiperSockets device carrying the same identifier. The child socket created by afiucv_hs_callback_syn() for such a match inherits hs_dev = NULL and transport = AF_IUCV_TRANS_HIPER, so the first send() on it returns -ENODEV. The socket delivered to accept() is unusable. Second, a frame arriving on one netdev can be delivered to a socket bound to a different IQD device. Which can lead to - Accept-queue exhaustion (DoS) - Attacker-controlled peer identity in the child socket - Data injection into existing sockets - Fabric noise on the IQD fabric, where bogus replies are sent - killing established connections Third, all AF_IUCV sockets live in init_net, as iucv_sock_alloc() calls sk_alloc(&init_net, ...). But even frames arriving on netdev devices in a namespace can be delivered to an IUCV socket. So a process in an unprivileged user and network namespace holding only the CAP_NET_RAW capability valid within that namespace can send a raw ETH_P_AF_IUCV frame on its own lo device and have it matched against init_net sockets. Fix all three by skipping any socket whose hs_dev does not match the ingress device. A classic z/VM IUCV socket has hs_dev == NULL; the ingress dev is never NULL, so classic sockets are skipped automatically. An unbound HIPER socket also has hs_dev == NULL and is skipped. A bound HIPER socket is only reachable from the exact IQD device it was bound to. Because hs_dev is always a device in init_net (iucv_sock_bind() scans for_each_netdev_rcu(&init_net, ...) exclusively), a frame whose ingress device belongs to another namespace never matches any socket. Note that AF_IUCV over HiperSockets provides no per-connection authentication: no sequence numbers, no TLS, no nonce. The four name fields identifying a connection are exchanged in plaintext on the shared HiperSockets segment (VCHID). Any host on the same HiperSockets segment could spoof any frame type against an existing connection. That is a protocol-level property unchanged by this patch. The fix reduces the attack surface to peers present on the same HiperSockets segment.
Where it lives
The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.
net/iucv/af_iucv.c
- What this is
- S390 IUCV NETWORK LAYERMAINTAINERS section matched on net/iucv/ · linux-s390@vger.kernel.org · Supported
- Kernel module
- af_iucv
Check it on the machine
grep -wE 'CONFIG_AFIUCV|CONFIG_IUCV' /boot/config-$(uname -r)Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.
lsmod | grep -w af_iucvPrints a line if that module is loaded right now, and nothing if it is not. One that is not loaded can still be loaded later by anything that needs it.
Show whether Debian builds this, per release
Debian does not build this code in 2 releases. It does build it in 3 releases, so the answer depends on which release the machine runs.
- bookwormn
- trixieMnot built on amd64/amd64, amd64/cloud-amd64, amd64/rt/amd64, arm64/arm64, arm64/arm64-16k, arm64/cloud-arm64, arm64/rt/arm64, armel/rpi, armhf/armmp, armhf/armmp-lpae, armhf/rt/armmp, ppc64el/powerpc64le, ppc64el/powerpc64le-64k, riscv64/riscv64
- forky, sidMnot built on amd64/amd64, amd64/cloud-amd64, amd64/rt-amd64, arm64/arm64, arm64/arm64-16k, arm64/cloud-arm64, arm64/rt-arm64, armhf/armmp, armhf/armmp-lpae, loong64/loong64, ppc64el/powerpc64le, ppc64el/powerpc64le-64k, riscv64/riscv64
- bookworm · linux-6.12n
- n
- not enabled on any flavour - this release does not build the code
- M
- a module where it is built at all; some flavours do not build it
- Build switches
- CONFIG_AFIUCV, CONFIG_IUCV
- Reads as
- all on means the file is compiled; any one off means it is not.
From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages
Signals
- Published
- 2026-09-11 (37 days ago)source
- CVSS
- 8.1 high
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:Hsource recompute it - Attack vector
- adjacent network (AV:A)source
- EPSS
- 0.31%, higher than 22.2% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- net/iucv
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 3.2 | 5.10.270 | 639828ad4d37 |
| 3.2 | 5.15.221 | 92e5c281f1ca |
| 3.2 | 6.1.188 | 712330f8a429 |
| 3.2 | 6.6.157 | 0a5af67e7184 |
| 3.2 | 6.12.109 | dfac2936b83b |
| 3.2 | 6.18.50 | 8e3763f1ccac |
| 3.2 | 7.2.4 | a7f0130a0917 |
| 3.2 | 7.3 | 80230a18c164 |
Debian advisories
| Advisory | Date | Shipped to | Debian |
|---|---|---|---|
| DLA-4841-1 | 2026-10-17 | bookworm 6.1.190-1 | tracker |
| DLA-4817-1 | 2026-10-04 | bookworm 6.12.111-1~deb12u1 | tracker |
| DSA-6528-1 | 2026-09-29 | trixie 6.12.111-1 | tracker |
Why the CNA scored it this way
Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source
- AV:AAttack vector, adjacent network
- afiucv_hs_rcv() is registered via dev_add_pack() for ethertype ETH_P_AF_IUCV (0xFBFB) on every netdevice and matches sockets by name fields only, so crafted L2 frames from a peer LPAR/guest on the HiperSockets VCHID or a host on an attached Ethernet segment reach AF_IUCV sockets; these frames are not IP-routable.
- AC:LAttack complexity, low
- The attacker fully controls the ETH_P_AF_IUCV frames and can set the plaintext dest/src name fields to match a listening or connected socket (names are exchanged in the clear on the fabric and IBM apps use well-known 8-byte names), so matching and delivery are reliable with no race.
- PR:NPrivileges required, none
- afiucv_hs_rcv() runs from netif RX softirq with no authentication, capability, or credential check on the path, so an adjacent HiperSockets or Ethernet peer needs no account or privilege on the victim s390 system.
- UI:NUser interaction, none
- Exploitation requires only sending crafted frames; the packet handler runs unconditionally in softirq and needs no victim action such as opening a file or mounting a filesystem.
- S:UScope, unchanged
- Impact is unauthorized delivery into the victim kernel's AF_IUCV sockets within the same OS security authority; this is not a KVM/Xen guest-to-host escape or IOMMU/DMA boundary bypass.
- C:NConfidentiality impact, none
- The flaw injects attacker-supplied frames into socket receive and control paths and does not provide a kernel memory read, out-of-bounds read, or use-after-free disclosure primitive.
- I:HIntegrity impact, high
- Because lookup ignores the ingress device, an attacker can inject arbitrary payload into connected AF_IUCV sockets, spoof the accepted peer identity on SYN, and forge FIN/WIN control frames, fully compromising the integrity of AF_IUCV communications.
- A:HAvailability impact, high
- SYN floods exhaust the listen accept queue and forged FIN/SYN|FIN frames tear down established connections, including classic z/VM IUCV sockets wrongly matched from any netdev, causing complete denial of AF_IUCV services.