diff options
| author | Frank Sorenson <sorenson@redhat.com> | 2026-07-21 18:55:52 -0500 |
|---|---|---|
| committer | Steve French <stfrench@microsoft.com> | 2026-07-21 20:19:11 -0500 |
| commit | c2f2e83e3bbc5483730fd4ee903182761f1ae50f (patch) | |
| tree | 3aeda5470ef8aef8db5b0a8fd7b681905eded413 /include/uapi/linux/tty_flags.h | |
| parent | e8a8d54c2d508891c142a928fc7d298c4c8bd0dd (diff) | |
| download | linux-c2f2e83e3bbc5483730fd4ee903182761f1ae50f.tar.gz linux-c2f2e83e3bbc5483730fd4ee903182761f1ae50f.zip | |
cifs: fix cifsFileInfo leak on kmalloc failure in deferred close drain paths
In cifs_close_deferred_file(), cifs_close_all_deferred_files(), and
cifs_close_deferred_file_under_dentry(), when a pending deferred close
is cancelled via cancel_delayed_work(), the subsequent kmalloc_obj() to
add the file to the local processing list may fail under memory pressure.
The loop breaks immediately, but the cancelled work is no longer pending
(it would have called _cifsFileInfo_put()), and the cfile is never added
to file_head for processing. The cifsFileInfo reference and the open
server handle both leak.
Fix by saving the cfile that failed allocation in a local variable,
breaking as before, and calling _cifsFileInfo_put() on it after
releasing the lock. Any files later in the iteration are unaffected
since their deferred work is still pending and will fire normally.
Fixes: e3fc065682eb ("cifs: Deferred close performance improvements")
Signed-off-by: Frank Sorenson <sorenson@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'include/uapi/linux/tty_flags.h')
0 files changed, 0 insertions, 0 deletions
