mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
ksmbd: don't align last entry offset in smb2 query directory
When checking smb2 query directory packets from other servers, OutputBufferLength is different with ksmbd. Other servers add an unaligned next offset to OutputBufferLength for the last entry. Signed-off-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
97550c7478
commit
04e260948a
@ -3422,9 +3422,9 @@ 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);
|
||||
next_entry_offset = ALIGN(struct_sz - 1 + conv_len,
|
||||
KSMBD_DIR_INFO_ALIGNMENT);
|
||||
struct_sz = readdir_info_level_struct_sz(info_level) - 1 + conv_len;
|
||||
next_entry_offset = ALIGN(struct_sz, KSMBD_DIR_INFO_ALIGNMENT);
|
||||
d_info->last_entry_off_align = next_entry_offset - struct_sz;
|
||||
|
||||
if (next_entry_offset > d_info->out_buf_len) {
|
||||
d_info->out_buf_len = 0;
|
||||
@ -3976,6 +3976,7 @@ int smb2_query_dir(struct ksmbd_work *work)
|
||||
((struct file_directory_info *)
|
||||
((char *)rsp->Buffer + d_info.last_entry_offset))
|
||||
->NextEntryOffset = 0;
|
||||
d_info.data_count -= d_info.last_entry_off_align;
|
||||
|
||||
rsp->StructureSize = cpu_to_le16(9);
|
||||
rsp->OutputBufferOffset = cpu_to_le16(72);
|
||||
|
@ -47,6 +47,7 @@ struct ksmbd_dir_info {
|
||||
int last_entry_offset;
|
||||
bool hide_dot_file;
|
||||
int flags;
|
||||
int last_entry_off_align;
|
||||
};
|
||||
|
||||
struct ksmbd_readdir_data {
|
||||
|
Loading…
Reference in New Issue
Block a user