CVE-2026-90153: ksmbd: bound smb_check_perm_dacl() ACE walks by DACL size
In the Linux kernel, the following vulnerability has been resolved:
ksmbd: bound smbcheckpermdacl() ACE walks by DACL size
smbcheckpermdacl() validates that the DACL fits inside the NT security descriptor, but then bounds its two ACE walks by the remaining NTSD length (aclsize) rather than the DACL's declared size (pdaclsize).
When pdacl->size is smaller than the trailing NTSD buffer, bytes after the declared DACL boundary - still inside the stored security descriptor - are parsed as ACEs during access checks. A crafted DACL can place an access-granting ACE beyond pdacl->size, and the current code accepts it during SMB2CREATE access validation, while parsedacl() and smbinheritdacl() stop at pdaclsize.
Bound both ACE walks by pdaclsize to match the DACL boundary semantics used elsewhere in the server.
Validation: - semantic KUnit harness shows the post-boundary ACE is selected before the fix and rejected (EACCES) after it - linux master (7.2-rc6), x8664
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
linux kernel ksmbdto a version that resolves this vulnerability.Fixed in 7.2-rc6
Event History
Frequently Asked Questions
Which access decision is affected?
The issue affects SMB2_CREATE access validation in ksmbd when checking a DACL in an NT security descriptor.
What must an attacker control to exploit this behavior?
They need a crafted DACL whose declared size ends before an access-granting ACE that remains in the trailing stored security-descriptor buffer. Before the fix, smb_check_perm_dacl() can parse and select that post-boundary ACE during the access check.
How can the corrected behavior be verified?
A DACL containing an access-granting ACE beyond its declared boundary should be rejected with EACCES during the relevant access validation. The described semantic KUnit harness observed that result after the fix.