提交 f25694e9 编写于 作者: N Namjae Jeon 提交者: Zhong Jinghua

ksmbd: use correct basic info level in set_file_basic_info()

mainline inclusion
from mainline-5.15-rc4
commit 88d30052
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I60T7G
CVE: NA

Reference: https://git.kernel.org/torvalds/linux/c/88d300522cbb

-------------------------------

Use correct basic info level in set/get_file_basic_info().
Reviewed-by: NRalph Boehme <slow@samba.org>
Signed-off-by: NNamjae Jeon <linkinjeon@kernel.org>
Signed-off-by: NSteve French <stfrench@microsoft.com>
Signed-off-by: NJason Yan <yanaijie@huawei.com>
Signed-off-by: NZhong Jinghua <zhongjinghua@huawei.com>
上级 27fa796f
...@@ -4127,7 +4127,7 @@ static void get_file_access_info(struct smb2_query_info_rsp *rsp, ...@@ -4127,7 +4127,7 @@ static void get_file_access_info(struct smb2_query_info_rsp *rsp,
static int get_file_basic_info(struct smb2_query_info_rsp *rsp, static int get_file_basic_info(struct smb2_query_info_rsp *rsp,
struct ksmbd_file *fp, void *rsp_org) struct ksmbd_file *fp, void *rsp_org)
{ {
struct smb2_file_all_info *basic_info; struct smb2_file_basic_info *basic_info;
struct kstat stat; struct kstat stat;
u64 time; u64 time;
...@@ -4137,7 +4137,7 @@ static int get_file_basic_info(struct smb2_query_info_rsp *rsp, ...@@ -4137,7 +4137,7 @@ static int get_file_basic_info(struct smb2_query_info_rsp *rsp,
return -EACCES; return -EACCES;
} }
basic_info = (struct smb2_file_all_info *)rsp->Buffer; basic_info = (struct smb2_file_basic_info *)rsp->Buffer;
generic_fillattr(file_inode(fp->filp), &stat); generic_fillattr(file_inode(fp->filp), &stat);
basic_info->CreationTime = cpu_to_le64(fp->create_time); basic_info->CreationTime = cpu_to_le64(fp->create_time);
time = ksmbd_UnixTimeToNT(stat.atime); time = ksmbd_UnixTimeToNT(stat.atime);
...@@ -4149,9 +4149,8 @@ static int get_file_basic_info(struct smb2_query_info_rsp *rsp, ...@@ -4149,9 +4149,8 @@ static int get_file_basic_info(struct smb2_query_info_rsp *rsp,
basic_info->Attributes = fp->f_ci->m_fattr; basic_info->Attributes = fp->f_ci->m_fattr;
basic_info->Pad1 = 0; basic_info->Pad1 = 0;
rsp->OutputBufferLength = rsp->OutputBufferLength =
cpu_to_le32(offsetof(struct smb2_file_all_info, AllocationSize)); cpu_to_le32(sizeof(struct smb2_file_basic_info));
inc_rfc1001_len(rsp_org, offsetof(struct smb2_file_all_info, inc_rfc1001_len(rsp_org, sizeof(struct smb2_file_basic_info));
AllocationSize));
return 0; return 0;
} }
...@@ -5367,7 +5366,7 @@ static int smb2_create_link(struct ksmbd_work *work, ...@@ -5367,7 +5366,7 @@ static int smb2_create_link(struct ksmbd_work *work,
static int set_file_basic_info(struct ksmbd_file *fp, char *buf, static int set_file_basic_info(struct ksmbd_file *fp, char *buf,
struct ksmbd_share_config *share) struct ksmbd_share_config *share)
{ {
struct smb2_file_all_info *file_info; struct smb2_file_basic_info *file_info;
struct iattr attrs; struct iattr attrs;
struct timespec64 ctime; struct timespec64 ctime;
struct file *filp; struct file *filp;
...@@ -5377,7 +5376,7 @@ static int set_file_basic_info(struct ksmbd_file *fp, char *buf, ...@@ -5377,7 +5376,7 @@ static int set_file_basic_info(struct ksmbd_file *fp, char *buf,
if (!(fp->daccess & FILE_WRITE_ATTRIBUTES_LE)) if (!(fp->daccess & FILE_WRITE_ATTRIBUTES_LE))
return -EACCES; return -EACCES;
file_info = (struct smb2_file_all_info *)buf; file_info = (struct smb2_file_basic_info *)buf;
attrs.ia_valid = 0; attrs.ia_valid = 0;
filp = fp->filp; filp = fp->filp;
inode = file_inode(filp); inode = file_inode(filp);
......
...@@ -1464,6 +1464,15 @@ struct smb2_file_all_info { /* data block encoding of response to level 18 */ ...@@ -1464,6 +1464,15 @@ struct smb2_file_all_info { /* data block encoding of response to level 18 */
char FileName[1]; char FileName[1];
} __packed; /* level 18 Query */ } __packed; /* level 18 Query */
struct smb2_file_basic_info { /* data block encoding of response to level 18 */
__le64 CreationTime; /* Beginning of FILE_BASIC_INFO equivalent */
__le64 LastAccessTime;
__le64 LastWriteTime;
__le64 ChangeTime;
__le32 Attributes;
__u32 Pad1; /* End of FILE_BASIC_INFO_INFO equivalent */
} __packed;
struct smb2_file_alt_name_info { struct smb2_file_alt_name_info {
__le32 FileNameLength; __le32 FileNameLength;
char FileName[0]; char FileName[0];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册