CVE-2026-53198

ksmbd: fix use-after-free of a deferred file_lock on double SMB2_CANCEL

State
Published
Severity
8.8 High
Published
Jun 25, 2026
Updated
Oct 15, 2026
Reserved
Jun 9, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

ksmbd: fix use-after-free of a deferred file_lock on double SMB2_CANCEL

A deferred byte-range lock (an SMB2_LOCK that blocks) registers an async work on conn->async_requests via setup_async_work(), with cancel_fn = smb2_remove_blocked_lock and cancel_argv[0] pointing at the struct file_lock.

When the request is cancelled, the worker frees the file_lock with locks_free_lock() and takes the cancelled early-exit, which "goto out"s and never reaches release_async_work() -- the only site that unlinks the work from conn->async_requests and clears cancel_fn/cancel_argv. The work therefore stays matchable on async_requests with a live cancel_fn pointing at the freed file_lock, until connection teardown finally runs release_async_work().

smb2_cancel() fires cancel_fn unconditionally with no state guard, so a second SMB2_CANCEL for the same AsyncId, arriving in that window, re-runs smb2_remove_blocked_lock() on the freed file_lock -- a slab use-after-free:

BUG: KASAN: slab-use-after-free in __locks_delete_block __locks_delete_block locks_delete_block ksmbd_vfs_posix_lock_unblock smb2_remove_blocked_lock smb2_cancel <- 2nd SMB2_CANCEL fires cancel_fn handle_ksmbd_work Allocated by ...: locks_alloc_lock <- smb2_lock Freed by ...: locks_free_lock <- smb2_lock (cancelled branch) ... cache file_lock_cache of size 192

Reproduced on mainline with KASAN by an authenticated SMB client.

Skip a work whose state is already KSMBD_WORK_CANCELLED so its cancel callback cannot be fired a second time.

Scores

CVSSScoreVectorSource
3.18.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 to before b7063c7426ea5a4d15e01b60538718765392f49dAffected
  • e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 to before 0da2e073f9cbf4985a0fd9acb71bc5ff599f8afdAffected
  • e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 to before 89ae9df09d2c1fb4a4eb495c113a7ce1dca34147Affected
  • e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 to before 14d2eee0193ac3cd1bf3d014373449f0b8d35d6dAffected
  • e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 to before 2b2eda2821cff1d1b5a423b6ee7d8fc6fbc8e694Affected
  • e2f34481b24db2fd634b5edb0a5bd0e4d38cc6e9 to before f580d27e8928828693df44ba2db0fffdbe11dfeaAffected
LinuxLinux
  • 5.15Affected
  • before 5.15Not affected
  • 6.1.176 through 6.1.*Not affected
  • 6.6.143 through 6.6.*Not affected
  • 6.12.94 through 6.12.*Not affected
  • 6.18.36 through 6.18.*Not affected
  • 7.0.13 through 7.0.*Not affected
  • 7.1 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.