Look up another CVE · open CVE-2026-72422 in the interactive tracker
CVE-2026-72422
ksmbd: fix use-after-free of conn->preauth_info in concurrent SMB2 NEGOTIATE
Published 2026-08-15 (2 months 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-72422 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 | fixed | 6.1.180-1 | Update the kernel and reboot. Fixed in 6.1.180-1. A running kernel keeps the old code until the machine restarts. |
| Debian 13trixie | fixed | 6.12.100-1 | Update the kernel and reboot. Fixed in 6.12.100-1. A running kernel keeps the old code until the machine restarts. |
| Debian 14forky | fixed | 7.1.5-1 | Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts. |
| Debian unstablesid | fixed | 7.1.5-1 | Update the kernel and reboot. Fixed in 7.1.5-1. A running kernel keeps the old code until the machine restarts. |
The vulnerability
What the bug is
conn->preauth_info is shared connection state (struct preauth_integrity_info, kmalloc-96) that is allocated and freed by the SMB2 NEGOTIATE handler and read by the response send path. smb2_handle_negotiate() allocates conn->preauth_info, and on a deassemble_neg_contexts() failure kfrees it and sets it to NULL. Both the allocation and the free/NULL happen under ksmbd_conn_lock(conn) (the connection srv_mutex), which is held across the whole handler body. The response send path smb3_preauth_hash_rsp(), called from the send: block of __handle_ksmbd_work(), reads conn->preauth_info and dereferences conn->preauth_info->Preauth_HashValue (via ksmbd_gen_preauth_integrity_hash()) without taking conn_lock. When a client drives two SMB2 NEGOTIATE requests on the same connection, one worker can free conn->preauth_info on the failing-negotiate path while a concurrent send-path worker is reading it, producing a slab use-after-free read (KASAN-confirmed). The send-path read tested conn->preauth_info for NULL but raced with the free that occurs between the NULL check and the dereference, so the NULL guard alone does not close the window. Serialize the NEGOTIATE-branch read in smb3_preauth_hash_rsp() under ksmbd_conn_lock(conn) and re-check conn->preauth_info inside the lock. Because the negotiate handler holds conn_lock across its kfree + NULL assignment, a reader that also takes conn_lock either runs fully before the allocation or fully after the NULL store, and can never observe the freed-but-not-yet-NULLed pointer. ksmbd_gen_preauth_integrity_hash() takes no locks itself (it only computes a SHA-512 over the buffer), so no lock-ordering inversion is introduced, and conn_lock is a sleepable mutex which is safe on this send path (it already performs network I/O).
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/smb2pdu.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 ksmbdPrints 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 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-08-15 (2 months ago)source
- CVSS
- 9.8 critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hsource recompute it - Attack vector
- network (AV:N)source
- EPSS
- 0.72%, higher than 52.9% 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
| Introduced | Fixed in | Commit |
|---|---|---|
| 5.15.61 | 5.15.212 | c7bef84740d1 |
| 6.0 | 6.1.178 | d0a469122e7b |
| 6.0 | 6.6.145 | 7470511d085a |
| 6.0 | 6.12.97 | 16a1ecf39c21 |
| 6.0 | 6.18.40 | 77bb0bbfcc4e |
| 6.0 | 7.1.5 | 1c89da3baa2b |
| 6.0 | 7.2 | 0c054227479e |
| 5.18.18 | 0 | 0 |
| 5.19.2 | 0 | 0 |
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 bug is in ksmbd's SMB2 NEGOTIATE handler reachable by any remote client over TCP port 445 without local access; exploitation requires only crafted SMB 3.1.1 negotiate packets on an established network connection.
- AC:LAttack complexity, low
- The attacker controls both sides of the race by pipelining two SMB2 NEGOTIATE requests on the same connection, with one crafted to fail deassemble_neg_contexts() and free preauth_info while the other is in the response send path; KASAN-confirmed UAF with no uncontrollable timing.
- PR:NPrivileges required, none
- SMB2 NEGOTIATE is processed before any authentication or session establishment; smb2_check_user_session explicitly exempts NEGOTIATE from session validation, so an unauthenticated remote attacker can reach the vulnerable code path.
- UI:NUser interaction, none
- Exploitation requires only network packets sent by the attacker to an exposed ksmbd instance; no victim user action such as mounting a share or opening a file is needed.
- S:UScope, unchanged
- Successful exploitation compromises kernel memory on the SMB server host itself; this is standard in-kernel memory corruption without crossing a VM, container, or IOMMU security boundary to a separate authority.
- C:HConfidentiality impact, high
- KASAN-confirmed slab use-after-free read of conn->preauth_info (kmalloc-96) via Preauth_HashValue and Preauth_HashId dereference; UAF on attacker-influenced freed heap memory enables arbitrary kernel memory disclosure through heap grooming.
- I:HIntegrity impact, high
- The UAF corrupts kernel heap state on a network-facing pre-auth path; freed preauth_integrity_info objects can be reallocated via heap spraying to obtain arbitrary write or control-flow hijack primitives beyond the immediate hash-buffer access.
- A:HAvailability impact, high
- Concurrent UAF read of freed conn->preauth_info during smb3_preauth_hash_rsp() causes kernel oops or panic (KASAN-confirmed); even without full exploitation the race reliably triggers high-severity denial of service on the server.