CVE-2026-31718

ksmbd: fix use-after-free in __ksmbd_close_fd() via durable scavenger

Critical · published May 1, 2026

CVSS v3.1
9.8
EPSS
1%
Percentile
50.6
In the wild
Unconfirmed
What it is

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

ksmbd: fix use-after-free in __ksmbd_close_fd() via durable scavenger

When a durable file handle survives session disconnect (TCP close without

SMB2_LOGOFF), session_fd_check() sets fp->conn = NULL to preserve the

handle for later reconnection. However, it did not clean up the byte-range

locks on fp->lock_list.

Later, when the durable scavenger thread times out and calls

__ksmbd_close_fd(NULL, fp), the lock cleanup loop did:

spin_lock(&fp->conn->llist_lock);

This caused a slab use-after-free because fp->conn was NULL and the

original connection object had already been freed by

ksmbd_tcp_disconnect().

The root cause is asymmetric cleanup: lock entries (smb_lock->clist) were

left dangling on the freed conn->lock_list while fp->conn was nulled out.

To fix this issue properly, we need to handle the lifetime of

smb_lock->clist across three paths:

- Safely skip clist deletion when list is empty and fp->conn is NULL.

- Remove the lock from the old connection's lock_list in

session_fd_check()

- Re-add the lock to the new connection's lock_list in

ksmbd_reopen_durable_fd().

The record
Technical detail
CVSS v3.1
9.8 · CRITICAL
Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00652 · 50.6th percentile
Published
2026-05-01T13:56Z
EPSS history
Timeline
  • 01 MAY 13:56Z
    ksmbd: fix use-after-free in __ksmbd_close_fd() via durable scavenger
    cvelistv5