CVE-2026-97557: smb: client: avoid leaking refcount in cifs_queue_oplock_break()
In the Linux kernel, the following vulnerability has been resolved:
smb: client: avoid leaking refcount in cifsqueueoplockbreak()
cifsqueueoplockbreak() unconditionally takes a reference on the target file before queueing cifsoplockbreak(). Only that work item decreases the reference counter again.
If another oplock break arrives while that work is still queued, queuework() will return false and not queue this second work item. As a result, we will never reach the point to drop the file reference again and are leaking this reference. This can be triggered when interacting with a slow-responding server.
As a result, later unmount operations for this file system will fail with
BUG: Dentry ... still in use (1) [unmount of cifs cifs] VFS: Busy inodes after unmount of cifs (cifs) kernel BUG at fs/super.c:777!
Fix this by only incrementing the reference count if the work has been queued successfully. Taking it after queuework() is safe because all three callers hold tcon->openfilelock across the call and cifsFileInfoput() decrements under that same lock, so a worker that starts the handler in the window cannot drop the reference before it has been taken.
Affected Software
Event History
Frequently Asked Questions
What conditions are needed to trigger the reference leak?
The affected client must receive another oplock break for a target file while an earlier cifs_oplock_break work item is still queued. The issue can be triggered when the CIFS client interacts with a slow-responding server.
What is the operational impact if the leak occurs?
The leaked file reference can prevent later unmount operations for the CIFS file system. The kernel may report a dentry still in use and busy inodes after unmount, followed by a kernel BUG.
How can I identify that a system has likely been affected?
Check kernel logs around CIFS unmount failures for messages such as "Dentry ... still in use (1)", "VFS: Busy inodes after unmount of cifs (cifs)", and a kernel BUG at fs/super.c:777.