summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorMarios Makassikis <mmakassikis@freebox.fr>2026-04-22 12:49:00 +0200
committerSteve French <stfrench@microsoft.com>2026-04-29 10:25:37 -0500
commitab4ad35e58a74c0fc51e5b0bcfb56523e97ff65f (patch)
treef1a7adcddfcbd1c04ff85bd770c08bb683154dd7 /fs
parent254f49634ee16a731174d2ae34bc50bd5f45e731 (diff)
smb: server: handle readdir_info_level_struct_sz() error
early exit in smb2_populate_readdir_entry() if the requested info_level is unknown. Signed-off-by: Marios Makassikis <mmakassikis@freebox.fr> Acked-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/smb/server/smb2pdu.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c
index 21825a69c29a..47b7af631f7b 100644
--- a/fs/smb/server/smb2pdu.c
+++ b/fs/smb/server/smb2pdu.c
@@ -3946,7 +3946,13 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
goto free_conv_name;
}
- struct_sz = readdir_info_level_struct_sz(info_level) + conv_len;
+ struct_sz = readdir_info_level_struct_sz(info_level);
+ if (struct_sz == -EOPNOTSUPP) {
+ rc = -EINVAL;
+ goto free_conv_name;
+ }
+
+ struct_sz += conv_len;
next_entry_offset = ALIGN(struct_sz, KSMBD_DIR_INFO_ALIGNMENT);
d_info->last_entry_off_align = next_entry_offset - struct_sz;