diff options
| author | Joshua Klinesmith <joshuaklinesmith@gmail.com> | 2026-04-06 22:31:12 -0400 |
|---|---|---|
| committer | Steve French <stfrench@microsoft.com> | 2026-04-12 18:07:55 -0500 |
| commit | 3e298897f41c61450c2e7a4f457e8b2485eb35b3 (patch) | |
| tree | 6763062c0ecd0765be49dc731be29d4edc9c7ea8 /samples/workqueue/stall_detector/git@git.tavy.me:linux.git | |
| parent | ad0057fb91218914d6c98268718ceb9d59b388e1 (diff) | |
ksmbd: fix use-after-free from async crypto on Qualcomm crypto engine
ksmbd_crypt_message() sets a NULL completion callback on AEAD requests
and does not handle the -EINPROGRESS return code from async hardware
crypto engines like the Qualcomm Crypto Engine (QCE). When QCE returns
-EINPROGRESS, ksmbd treats it as an error and immediately frees the
request while the hardware DMA operation is still in flight. The DMA
completion callback then dereferences freed memory, causing a NULL
pointer crash:
pc : qce_skcipher_done+0x24/0x174
lr : vchan_complete+0x230/0x27c
...
el1h_64_irq+0x68/0x6c
ksmbd_free_work_struct+0x20/0x118 [ksmbd]
ksmbd_exit_file_cache+0x694/0xa4c [ksmbd]
Use the standard crypto_wait_req() pattern with crypto_req_done() as
the completion callback, matching the approach used by the SMB client
in fs/smb/client/smb2ops.c. This properly handles both synchronous
engines (immediate return) and async engines (-EINPROGRESS followed
by callback notification).
Fixes: e2f34481b24d ("cifsd: add server-side procedures for SMB3")
Link: https://github.com/openwrt/openwrt/issues/21822
Signed-off-by: Joshua Klinesmith <joshuaklinesmith@gmail.com>
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'samples/workqueue/stall_detector/git@git.tavy.me:linux.git')
0 files changed, 0 insertions, 0 deletions
