HIGH Introduced in 2.6.26
qeth QueryIoctl Overflow
CVE-2026-80584
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
KernelScan AI6.3MEDIUM
01Description
In the Linux kernel, the following vulnerability has been resolved: s390/qeth: validate user buffer length in SNMP and ARP query ioctls qeth_snmp_command() and qeth_l3_arp_query() allocate a buffer sized by a user-supplied length (udata_len) without checking a lower bound, then set udata_offset to a fixed non-zero value and pass both to a reply callback. The callback bounds-checks the copy with if ((udata_len - udata_offset) < len) Both fields are u32, so a udata_len smaller than udata_offset makes the subtraction wrap and the check pass, and the following memcpy() writes past the allocation. A udata_len of 0 also yields ZERO_SIZE_PTR from kzalloc(), which the existing NULL check does not catch. Reject buffers smaller than udata_offset before allocating, so the callback subtraction can no longer underflow.
02KernelScan AI Analysis
Risk summary
A local attacker with CAP_NET_ADMIN on an s390 system with qeth network hardware can trigger a heap buffer overflow via SNMP or ARP query ioctls by supplying a buffer length smaller than a fixed internal offset. This can corrupt kernel heap memory, potentially leading to privilege escalation or system crash. The vulnerability requires s390-specific hardware and is not network-reachable.
Vulnerability analysis
The qeth network driver's SNMP and ARP query ioctl handlers accept a user-supplied buffer length, allocate a buffer of that size, and later pass the length along with a fixed non-zero offset to a callback. The callback validates the copy size by subtracting the offset from the length using unsigned 32-bit arithmetic; when the user-supplied length is smaller than the offset, the subtraction wraps to a very large value, the bounds check passes, and a subsequent memory copy writes far past the end of the allocated buffer. A zero-length request also produces a special small-allocation pointer that bypasses the existing NULL check. The fix rejects any buffer length smaller than the fixed offset before allocating, so the unsigned subtraction in the callback can no longer underflow. The vulnerable path is reachable locally by any process holding CAP_NET_ADMIN in the init namespace on an s390 system with a qeth network device configured.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 5.10 | 2.6.26 | 5.10.266 | 9d00eeb2d27f |
| 5.15 | 2.6.26 | 5.15.217 | 46443eaddebd |
| 6.1 | 2.6.26 | 6.1.184 | 91935843f939 |
| 6.12 | 2.6.26 | 6.12.105 | 3083818e67bc |
| 6.18 | 2.6.26 | 6.18.46 | a30836477479 |
| 6.6 | 2.6.26 | 6.6.153 | cc423f4105fe |
| 7.1 | 2.6.26 | 7.1.10 | 75fb3151513d |
| mainline | 2.6.26 | 7.2 | d141f087b1af |
| cip/5.10 | 2.6.26 | 5.10.268-cip77 | 9d00eeb2d27f |
| cip/5.10-rt | 2.6.26 | 5.10.268-cip77-rt34 | 9d00eeb2d27f |
| cip/6.1 | 2.6.26 | 6.1.187-cip60 | 91935843f939 |
| cip/6.1-rt | 2.6.26 | 6.1.189-cip61-rt32 | 91935843f939 |
| cip/6.12 | 2.6.26 | 6.12.108-cip31 | 3083818e67bc |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.108-cip31 |
| cip/6.1 | Fixed in 6.1.187-cip60 |
| cip/6.1-rt | Fixed in 6.1.189-cip61-rt32 |
| cip/5.10 | Fixed in 5.10.268-cip77 |
| cip/5.10-rt | Fixed in 5.10.268-cip77-rt34 |
| cip/4.19 | Affected — no CIP fix yet (latest 4.19.325-cip136) |
| cip/4.19-rt | Affected — no CIP fix yet (latest 4.19.325-cip136-rt50) |
| cip/4.4 | Affected — no CIP fix yet (latest 4.4.302-cip115) |
| cip/4.4-rt | Affected — no CIP fix yet (latest 4.4.302-cip115-rt63) |