Look up another CVE · open CVE-2026-80710 in the interactive tracker
CVE-2026-80710
s390/dasd: Fix undersized format-check buffer
Published 2026-08-28 (2 months ago) by the Linux kernel CNA. Subsystem drivers/s390. Debian urgency: not yet assigned.
What to do, per Debian release
Debian's own status for CVE-2026-80710 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 | vulnerable | 6.1.190-1 | No fix published anywhere yet, neither in Debian nor upstream for the series bookworm tracks. Watch the Debian tracker page for this CVE. Advisories for bookworm have historically landed a median of 23 days after publication. |
| Debian 13trixie | fixed | 6.12.105-1 | Update the kernel and reboot. Fixed in 6.12.105-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.1.8-1 | Update the kernel and reboot. Fixed in 7.1.8-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.1.8-1 | Update the kernel and reboot. Fixed in 7.1.8-1. A running kernel keeps the old code until the machine restarts. |
| Debian 12bookworm · linux-6.12 | fixedDLA-4788-1 · 2026-09-19 · text | 6.12.107-1~deb12u1 | Update the kernel and reboot. DLA-4788-1 shipped the fix on 2026-09-19, in 6.12.107-1~deb12u1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
fmt_buffer_size in dasd_eckd_check_device_format() is declared as int, even though one of the multiplicands, sizeof(struct eckd_count), is a size_t. The expression trkcount * rpt_max * sizeof(struct eckd_count) is therefore correctly evaluated at 64-bit width, but the result is silently truncated when it is stored back into the 32-bit fmt_buffer_size variable. For a sufficiently large track range (start_unit/stop_unit are caller-controlled) this truncation yields a buffer size far smaller than the number of tracks actually requested. kzalloc() then succeeds with an undersized allocation, while the subsequent channel program build still operates on the untruncated track count and writes past the end of that buffer. Compute the buffer size with check_mul_overflow() and keep it in a size_t, so that a value that no longer fits results in -EINVAL instead of a silently truncated allocation size.
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.
drivers/s390/block/dasd_eckd.c
- What this is
- S390 DASD DRIVERMAINTAINERS section matched on drivers/s390/block/dasd* · linux-s390@vger.kernel.org · Supported
- Kernel module
- dasd_eckd_mod
Check it on the machine
grep -wE 'CONFIG_DASD_ECKD|CONFIG_S390' /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 dasd_eckd_modPrints 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_DASD_ECKD, CONFIG_S390
- 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-08-28 (2 months ago)source
- CVSS
- 7.8 high
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hsource recompute it - Attack vector
- local (AV:L)source
- EPSS
- 0.18%, higher than 6.6% of all CVEssource
- CISA KEV
- not listedthe KEV catalogue
- Debian urgency
- not yet assignedsource
- Subsystem
- drivers/s390
Upstream fixes
The versions the CNA records as introducing and fixing this, and the commit for each. source
| Introduced | Fixed in | Commit |
|---|---|---|
| 4.7 | 6.6.151 | aca18289c86f |
| 4.7 | 6.12.103 | 9f88dda2f229 |
| 4.7 | 6.18.44 | e16e0fc54120 |
| 4.7 | 7.1.8 | 87f3389cd392 |
| 4.7 | 7.2 | 7f40b346462f |
Debian advisories
| Advisory | Date | Shipped to | Debian |
|---|---|---|---|
| DLA-4788-1 | 2026-09-19 | bookworm 6.12.107-1~deb12u1 | 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:LAttack vector, local
- The bug is reached only via the BIODASDCHECKFMT ioctl on an s390 DASD block device (/dev/dasd*), through blkdev_ioctl → dasd_ioctl → dasd_ioctl_check_format → dasd_eckd_check_device_format; it is not reachable over the network or by physical media insertion.
- AC:LAttack complexity, low
- On large IBM Z/LinuxONE ECKD volumes (long_no_cyl geometry), an attacker who can open the device fully controls start_unit/stop_unit in the ioctl and can reliably force trkcount*rpt_max*sizeof(eckd_count) past 32 bits, causing undersized kzalloc while CCW/TCW channel programs still DMA-write the full track range.
- PR:LPrivileges required, low
- Unlike BIODASDFMT, dasd_ioctl_check_format performs no CAP_SYS_ADMIN check; any local principal with permission to open the DASD block device (e.g., disk-group membership or equivalent device-node access) can issue BIODASDCHECKFMT without init-namespace root.
- UI:NUser interaction, none
- Exploitation requires only the attacker issuing the ioctl with crafted track-range parameters; no separate victim action such as mounting a filesystem or opening a file is needed.
- S:UScope, unchanged
- The heap corruption occurs entirely within the host kernel DASD driver on the same LPAR; it does not cross a VM, container, or IOMMU security boundary to affect a different authority.
- C:HConfidentiality impact, high
- Hardware DMA via READ_COUNT CCWs/TCWs writes eckd_count structures past the kmalloc boundary, and dasd_eckd_format_evaluate_tracks then reads beyond the allocation; this out-of-bounds heap corruption can disclose adjacent kernel objects and support further memory-read primitives.
- I:HIntegrity impact, high
- Channel programs built in dasd_eckd_build_check/dasd_eckd_build_check_tcw DMA up to trkcount*rpt_max eight-byte eckd_count entries into an undersized GFP_KERNEL|GFP_DMA buffer, yielding a controllable kernel heap overflow writable for code-execution primitives.
- A:HAvailability impact, high
- Corrupting kmalloc heap metadata and adjacent objects via large out-of-bounds DMA writes can trigger immediate kernel oops/panic or wedged I/O paths on mission-critical IBM Z storage nodes, satisfying high availability impact.