data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-90010 in the interactive tracker

CVE-2026-90010

scsi: bsg: Cap io_uring sense copy to max_response_len

7.8 EPSS 0.2% AV:L

Published 2026-09-16 (33 days ago) by the Linux kernel CNA. Subsystem drivers/scsi. Debian urgency: unimportant.

What to do, per Debian release

Debian's own status for CVE-2026-90010 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

ReleaseStatus VersionWhat this means
Debian 12bookwormnot affected6.1.190-1Nothing to do. bookworm never shipped the vulnerable code.
Debian 13trixienot affected6.12.113-1Nothing to do. trixie never shipped the vulnerable code.
Debian 14forkyfixed7.2.6-1Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.2.6-1Update the kernel and reboot. Fixed in 7.2.6-1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

Completion copied scmd->sense_len to the user response buffer without honoring max_response_len. After a valid sense, the midlayer sets sense_len to the real length (up to SCSI_SENSE_BUFFERSIZE), so a smaller user buffer was overrun.

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/scsi/scsi_bsg.c

What this is
SCSI SUBSYSTEMMAINTAINERS section matched on drivers/scsi/ · linux-scsi@vger.kernel.org · Maintained
Kernel module
scsi_mod

Check it on the machine

grep -wE 'CONFIG_BLK_DEV_BSG|CONFIG_SCSI' /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 scsi_mod

Prints 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 builds this code. Every release below compiles the affected file into the kernels it ships.

  • bookworm, trixie, forky, sidb
b
built in on some flavours, a module on others
Build switches
CONFIG_BLK_DEV_BSG, CONFIG_SCSI
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-16 (33 days 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.17%, higher than 5.3% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
unimportantsource
Subsystem
drivers/scsi

Upstream fixes

The versions the CNA records as introducing and fixing this, and the commit for each. source

IntroducedFixed inCommit
7.17.2.55d326efc334e
7.17.3ece06de72673

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
Reached only via IORING_OP_URING_CMD on a local /dev/bsg character device (bsg_fops.uring_cmd → bsg_uring_cmd → scsi_bsg_uring_cmd → scsi_bsg_uring_task_cb); per CNA guidance io_uring is Local, and no network or adjacent-radio path feeds SCSI sense completion.
AC:LAttack complexity, low
The attacker controls the CDB, response pointer, and claimed max_response_len, and can reliably force CHECK CONDITION with an illegal-field or out-of-range READ/INQUIRY/TEST_UNIT_READY so the midlayer sets sense_len up to SCSI_SENSE_BUFFERSIZE (96) and the uncapped copy_to_user runs with no race.
PR:LPrivileges required, low
bsg_open() has no capable() check and scsi_cmd_allowed() permits unprivileged read-class CDBs (INQUIRY, READ_*, TEST_UNIT_READY) without CAP_SYS_RAWIO; /dev/bsg nodes are routinely granted to disk/cdrom group members and uaccess-seated users on desktops, Android, and shared workstations.
UI:NUser interaction, none
The attacker opens /dev/bsg and submits the io_uring command from their own process; no separate victim action such as mounting a filesystem or attaching hardware is required.
S:UScope, unchanged
copy_to_user() writes past the caller-supplied userspace sense buffer in the submitting process and does not by itself corrupt kernel slab independently of that process or cross a VM, IOMMU, or sandbox boundary.
C:HConfidentiality impact, high
Completion ignores max_response_len and copies up to 96 bytes of sense into adjacent userspace, a heap/stack overflow that can be turned into an arbitrary-read primitive against a privileged bsg/io_uring consumer rather than a bounded disclosure of intended sense data.
I:HIntegrity impact, high
scsi_bsg_uring_task_cb uses min(sense_len, SCSI_SENSE_BUFFERSIZE) instead of max_response_len, so a small user buffer is overrun by up to 96 bytes of sense, enabling adjacent heap/stack corruption and potential control-flow hijacking.
A:HAvailability impact, high
The out-of-bounds write can crash the calling process or a storage-management consumer using a traditional 18/32-byte sense buffer, and CHECK CONDITION commands can be repeated to induce process termination.