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

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

CVE-2026-90268

scsi: sd: Fix error handling in sd_probe() after large pool creation failure

8.1 EPSS 0.5% AV:N

Published 2026-09-17 (31 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-90268 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

After device_add(&sdkp->disk_dev) succeeds, sd_large_pool_create() failure must unregister disk_dev and let scsi_disk_release() free sdkp. Going through out_free_index kfree()s an already registered device and leaks the sysfs entry.

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/sd.c

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

Check it on the machine

grep -w CONFIG_BLK_DEV_SD /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 sd_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 as a loadable module. Every release below compiles it as a module on every flavour, so whether the code is in the running kernel depends on whether that module is loaded.

  • bookworm, trixie, forky, sidm
m
a loadable module on every flavour - check lsmod, can be blacklisted
Build switch
CONFIG_BLK_DEV_SD

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-17 (31 days ago)source
CVSS
8.1 high
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:Hsource recompute it
Attack vector
network (AV:N)source
EPSS
0.45%, higher than 38.0% 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.6748a14a0d41c
7.17.3e3cc6ea1a745

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:NAttack vector, network
After iscsi_scan_session()->scsi_scan_target()->scsi_probe_and_add_lun() binds TYPE_DISK, sd_probe()->sd_revalidate_disk()->read_capacity_16() takes the Logical Block Length from the target’s READ CAPACITY(16) Data-In at buffer[8] (or READ CAPACITY(10) at buffer[4]) over iSCSI TCP; that value is what enters the sd_large_pool_create() error path.
AC:HAttack complexity, high
The bad goto is taken only when sd_large_page_pool is still NULL and mempool_create_page_pool(SD_MEMPOOL_SIZE=2, get_order(BLK_MAX_BLOCK_SIZE)) fails its GFP_KERNEL order-4 preallocation of two 64K pages; a remote target cannot force that allocator failure or whether an earlier large-sector disk already created the pool.
PR:NPrivileges required, none
The attacker is the iSCSI target supplying INQUIRY PDT=TYPE_DISK and the READ CAPACITY block length during automatic LUN scan; scsi_bus_probe()->sd_probe() runs on the initiator with no capability check against the target, and iSCSI is commonly deployed without CHAP.
UI:NUser interaction, none
Once the session is ISCSI_SESSION_LOGGED_IN, iscsi_scan_session work calls scsi_scan_target, which invokes sd_probe and sd_revalidate_disk with no open(), mount, or operator action; the target alone presents the LUN and the capacity response.
S:UScope, unchanged
kfree(sdkp) while sdkp->disk_dev remains registered after device_add() corrupts only the initiator kernel’s device-model/sysfs state for that scsi_disk; it does not cross a VM, IOMMU, or other security-authority boundary.
C:HConfidentiality impact, high
out_free_index kfree()s the scsi_disk that embeds the still-registered disk_dev, so later sysfs reads of sd_disk_groups attributes via to_scsi_disk() and scsi_disk_release() operate on a freed heap object, giving a use-after-free read primitive.
I:HIntegrity impact, high
The same kfree leaves disk_dev, gd->private_data, and the sdev drvdata set by dev_set_drvdata() pointing at freed sdkp; writable scsi_disk sysfs stores and scsi_disk_release()’s second kfree/ida_free then write through that UAF, enabling heap corruption and control-flow hijack.
A:HAvailability impact, high
Use-after-free of the registered scsi_disk, including scsi_disk_release() running on already-freed memory (double-free of sdkp and a second ida_free of sdkp->index), oopses or panics when udev, sysfs, or parent sdev removal touches disk_dev.