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

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

CVE-2026-90176

ksmbd: Do not skip lock checks for single-byte ranges

8.1 EPSS 0.5% AV:N

Published 2026-09-17 (31 days ago) by the Linux kernel CNA. Subsystem fs/smb. Debian urgency: not yet assigned.

What to do, per Debian release

Debian's own status for CVE-2026-90176 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 12bookwormfixedDLA-4841-1 · 2026-10-17 · text6.1.190-1Update 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 13trixiefixedDSA-6528-1 · 2026-09-29 · text6.12.111-1Update 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 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.
Debian 12bookworm · linux-6.12fixedDLA-4817-1 · 2026-10-04 · text6.12.111-1~deb12u1Update 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

check_lock_range() uses inclusive ranges. Its callers pass the end offset as start + length - 1, so start == end represents a valid single-byte range rather than an empty range. The start == end shortcut therefore skips mandatory byte-range lock checks for one-byte reads, writes, copychunk operations and one-byte truncate ranges. A conflicting lock covering that byte is not checked and the operation is allowed to proceed. Remove the shortcut. The truncate size == inode->i_size case is already handled by only calling check_lock_range() when the new size differs from the current file 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.

fs/smb/server/vfs.c

What this is
KERNEL SMB3 SERVER (KSMBD)MAINTAINERS section matched on fs/smb/server/ · linux-cifs@vger.kernel.org · Maintained
Kernel module
ksmbd

Check it on the machine

grep -wE 'CONFIG_SMBFS|CONFIG_SMB_SERVER' /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 ksmbd

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, sid, bookworm · linux-6.12m
m
a loadable module on every flavour - check lsmod, can be blacklisted
Build switches
CONFIG_SMBFS, CONFIG_SMB_SERVER
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-17 (31 days ago)source
CVSS
8.1 high
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Nsource recompute it
Attack vector
network (AV:N)source
EPSS
0.50%, higher than 41.5% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
not yet assignedsource
Subsystem
fs/smb

Upstream fixes

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

IntroducedFixed inCommit
6.1.1606.1.188a89cc145832e
6.6.1206.6.157993e0158331d
6.12.646.12.110f751d6e39d4c
6.18.36.18.5284c2d8e807ac
6.197.2.607a9e289ff7e
6.197.3d40c24634fe0

Debian advisories

AdvisoryDateShipped toDebian
DLA-4841-12026-10-17bookworm 6.1.190-1tracker
DLA-4817-12026-10-04bookworm 6.12.111-1~deb12u1tracker
DSA-6528-12026-09-29trixie 6.12.111-1tracker

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
The skip is driven by attacker-controlled range length in SMB2 PDUs: smb2_read()/smb2_write() pass Length==1 into ksmbd_vfs_read/write, set_end_of_file_info() passes a 1-byte size change to ksmbd_vfs_truncate(), and FSCTL_SRV_COPYCHUNK Length==1 reaches ksmbd_vfs_copy_file_ranges(); those messages arrive on the ksmbd TCP connection in ksmbd_conn_handler_loop().
AC:LAttack complexity, low
Callers pass an inclusive end of start+length-1, so Length==1 makes start==end and the shortcut in check_lock_range() returns 0 before walking ctx->flc_posix; the attacker sets Length, Offset, EndOfFile, or COPYCHUNK Length in the PDU, and the skip is deterministic with no race or uncontrollable layout.
PR:LPrivileges required, low
smb2_check_user_session() requires SMB2_SESSION_VALID before SMB2_READ/WRITE/SET_INFO/IOCTL, smb2_get_ksmbd_tcon() requires a tree connect, and the handlers resolve a fid via ksmbd_lookup_fd_slow(); this is not negotiate or session-setup, so an authenticated SMB share user is required.
UI:NUser interaction, none
The attacker, holding their own session, tree connect, and open handle, sends the one-byte SMB2 READ, WRITE, SET_INFO FILE_END_OF_FILE_INFORMATION, or FSCTL_SRV_COPYCHUNK; no other user must mount media or confirm an action.
S:UScope, unchanged
Bypassing check_lock_range() only allows this ksmbd worker to read or write host file bytes that conflicting FL_POSIX locks on flc_posix should have denied; there is no VM escape, IOMMU bypass, or sandbox boundary crossing.
C:HConfidentiality impact, high
ksmbd_vfs_read() and the COPYCHUNK source check skip exclusive F_WRLCK locks belonging to another filp when start==end, so kernel_read() returns that byte; repeating SMB2 READ at chosen offsets discloses every exclusively locked byte of a file the attacker can open.
I:HIntegrity impact, high
ksmbd_vfs_write(), ksmbd_vfs_truncate() for size==i_size±1, and COPYCHUNK dest checks likewise skip conflicting F_RDLCK/F_WRLCK, so kernel_write() and vfs_truncate() can overwrite locked bytes or change size by one at attacker-chosen offsets.
A:NAvailability impact, none
When the shortcut hits, check_lock_range() returns 0 and the existing kernel_read/kernel_write/vfs_truncate path runs normally; the bug does not NULL-deref, BUG, deadlock, or panic, and the ksmbd worker keeps serving.