ksmbd: reject empty-attribute synchronize-only create

smb2.create.gentest checks each desired access bit independently and
expects an open that requests only SYNCHRONIZE with CreateDisposition
OPEN_IF and FileAttributes 0 to fail with STATUS_ACCESS_DENIED.

Rejecting all SYNCHRONIZE-only opens is too broad: SYNCHRONIZE does not
imply read, write, or delete data access, and
smb2.sharemode.sharemode-access expects a SYNCHRONIZE-only open to succeed
when it does not conflict with the existing share mode.

Limit the rejection to the gentest create shape: SYNCHRONIZE-only access,
OPEN_IF disposition, and no file attributes. Other synchronize-only opens
are handled by the normal permission and share-mode checks.

Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
Namjae Jeon
2026-06-21 19:44:40 +09:00
committed by Steve French
parent 19043971c9
commit 4687da7b28

View File

@@ -3332,6 +3332,13 @@ int smb2_open(struct ksmbd_work *work)
goto err_out2;
}
if (req->DesiredAccess == FILE_SYNCHRONIZE_LE &&
req->CreateDisposition == FILE_OPEN_IF_LE &&
!req->FileAttributes) {
rc = -EACCES;
goto err_out2;
}
if (req->FileAttributes && !(req->FileAttributes & FILE_ATTRIBUTE_MASK_LE)) {
pr_err("Invalid file attribute : 0x%x\n",
le32_to_cpu(req->FileAttributes));