CVE-2026-64437 in Linux
Zusammenfassung
von VulDB • 25.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
ksmbd: Behebung eines Use-After-Free bei einem verzögerten file_lock nach SMB2_CLOSE gefolgt von SMB2_CANCEL
Der Commit f580d27e8928 („ksmbd: fix use-after-free of a deferred file_lock on double SMB2_CANCEL") bewirkte, dass smb2_cancel() eine Arbeitseinheit überspringt, deren Zustand KSMBD_WORK_CANCELLED ist, sodass ihre cancel_fn nicht ein zweites Mal ausgelöst werden kann. Allerdings hat KSMBD_WORK drei Zustände (ACTIVE, CANCELLED, CLOSED), und derselbe Freigabepfad wird auch für den Zustand CLOSED erreicht:
SMB2_CLOSE am Sperr-Handle -> set_close_state_blocked_works() setzt den Zustand der verzögerten Arbeit auf KSMBD_WORK_CLOSED und weckt den smb2_lock()-Worker. Der Worker nimmt die Early-Exit-Bedingung bei nicht-ACTIVE, sperrt file_lock über locks_free_lock(), und da der Zustand nicht KSMBD_WORK_CANCELLED ist, wird der STATUS_RANGE_NOT_LOCKED-Zweig mit „goto out2" genommen – was, ähnlich wie im CANCELLED-Zweig, release_async_work() überspringt. Die Arbeit verbleibt in conn->async_requests mit einer aktiven cancel_fn = smb2_remove_blocked_lock, die auf den bereits freigegebenen file_lock zeigt.
Ein nachfolgendes SMB2_CANCEL für dieselbe AsyncId umgeht dann die nur für KSMBD_WORK_CANCELLED vorgesehene Schutzabfrage (da ihr Zustand KSMBD_WORK_CLOSED ist), sodass smb2_cancel() cancel_fn erneut über den freigegebenen file_lock auslöst – derselbe Use-After-Free, der hier durch SMB2_CLOSE statt einem ersten SMB2_CANCEL ausgelöst wird:
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 <- 2. SMB2_CANCEL löst cancel_fn aus handle_ksmbd_work Zugewiesen von ...: locks_alloc_lock <- smb2_lock Freigegeben von ...: locks_free_lock <- smb2_lock (Early-Exit bei nicht-ACTIVE) ... Cache file_lock_cache der Größe 192
Reproduziert auf Mainline 7.1-rc7 (das bereits f580d27e8928 enthält) mit KASAN durch einen authentifizierten SMB-Client; die Doppel-SMB2_CANCEL-Kontrolle bleibt in diesem Kernel still, sodass der Fehlerbericht dem CLOSE-Auslöser zugeordnet werden kann.
Nur eine ACTIVE verzögerte Arbeit darf ihre cancel_fn auslösen: Beide Endzustände (CANCELLED und CLOSED) führen zum Early-Exit von smb2_lock(), der file_lock freigibt und release_async_work() überspringt. Schutzabfrage auf KSMBD_WORK_ACTIVE, sodass jede nicht-ACTIVE Arbeit übersprungen wird.
If you want to get best quality of vulnerability data, you may have to visit VulDB.