* [PATCH v7 0/2] smb: move duplicate definitions to common header file
@ 2025-11-13 13:32 chenxiaosong.chenxiaosong
2025-11-13 13:32 ` [PATCH v7 1/2] smb: move CREATE_DURABLE_RECONN to common/smb2pdu.h chenxiaosong.chenxiaosong
2025-11-13 13:32 ` [PATCH v7 2/2] smb: move FILE_SYSTEM_ATTRIBUTE_INFO to common/fscc.h chenxiaosong.chenxiaosong
0 siblings, 2 replies; 6+ messages in thread
From: chenxiaosong.chenxiaosong @ 2025-11-13 13:32 UTC (permalink / raw)
To: sfrench, smfrench, linkinjeon, linkinjeon, christophe.jaillet
Cc: linux-cifs, linux-kernel, chenxiaosong, ChenXiaoSong
From: ChenXiaoSong <chenxiaosong@kylinos.cn>
In order to maintain the code more easily, move some duplicate definitions
to common header file. Add some MS documentation references for macro and
struct definitions.
I have tested all patches using xfstests and smbtorture, and no additional
test failures were observed in the results. The detailed test results can
be found in https://chenxiaosong.com/en/smb-test/20251113.html
v3: https://lore.kernel.org/all/20251014071917.3004573-1-chenxiaosong.chenxiaosong@linux.dev/
The following patches from v3 have already been merged into the mainline:
- d877470b5991 smb: move some duplicate definitions to common/cifsglob.h
- 379510a815cb smb/server: fix possible refcount leak in smb2_sess_setup()
- 6fced056d2cc smb/server: fix possible memory leak in smb2_read()
v4: https://lore.kernel.org/all/20251027071316.3468472-1-chenxiaosong.chenxiaosong@linux.dev/
v5: https://lore.kernel.org/all/20251102073059.3681026-1-chenxiaosong.chenxiaosong@linux.dev/
The following patches from v4 and v5 have been applied to the ksmbd-for-next-next branch: https://git.samba.org/?p=ksmbd.git;a=shortlog;h=refs/heads/ksmbd-for-next-next
- smb: fix some warnings reported by scripts/checkpatch.pl
- smb: do some cleanups
- smb: move FILE_SYSTEM_SIZE_INFO to common/fscc.h
- smb: move some duplicate struct definitions to common/fscc.h
- smb: move list of FileSystemAttributes to common/fscc.h
- smb: move SMB_NEGOTIATE_REQ to common/smb2pdu.h
- smb: move some duplicate definitions to common/smb2pdu.h
- smb: move create_durable_rsp_v2 to common/smb2pdu.h
- smb: move create_durable_handle_reconnect_v2 to common/smb2pdu.h
- smb: move create_durable_req_v2 to common/smb2pdu.h
- smb: move MAX_CIFS_SMALL_BUFFER_SIZE to common/smbglob.h
- smb/client: fix CAP_BULK_TRANSFER value
- smb: move resume_key_ioctl_rsp to common/smb2pdu.h
- smb: move copychunk definitions to common/smb2pdu.h
- smb: move smb_sockaddr_in and smb_sockaddr_in6 to common/smb2pdu.h
- smb: move SMB1_PROTO_NUMBER to common/smbglob.h
- smb: move get_rfc1002_len() to common/smbglob.h
- smb: move smb_version_values to common/smbglob.h
- smb: rename common/cifsglob.h to common/smbglob.h
v5->v7:
- Patch #0001: use typedef to define both CREATE_DURABLE_REQ and CREATE_DURABLE_RECONN for a single struct.
- Patch #0002: make FILE_SYSTEM_ATTRIBUTE_INFO.FileSystemName a flexible array member.
v6->v7:
- Patch #0001: CREATE_DURABLE -> CREATE_DURABLE_REQ
CREATE_DURABLE_RECONN_REQ -> CREATE_DURABLE_RECONN
v6: https://lore.kernel.org/all/20251113092602.24733-1-chenxiaosong.chenxiaosong@linux.dev/
ChenXiaoSong (2):
smb: move CREATE_DURABLE_RECONN to common/smb2pdu.h
smb: move FILE_SYSTEM_ATTRIBUTE_INFO to common/fscc.h
fs/smb/client/cifspdu.h | 10 ----------
fs/smb/client/smb2pdu.c | 25 ++++++++++++-------------
fs/smb/common/fscc.h | 8 ++++++++
fs/smb/common/smb2pdu.h | 4 ++--
fs/smb/server/smb2pdu.c | 12 ++++++------
fs/smb/server/smb2pdu.h | 12 ------------
fs/smb/server/smb_common.h | 7 -------
7 files changed, 28 insertions(+), 50 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v7 1/2] smb: move CREATE_DURABLE_RECONN to common/smb2pdu.h 2025-11-13 13:32 [PATCH v7 0/2] smb: move duplicate definitions to common header file chenxiaosong.chenxiaosong @ 2025-11-13 13:32 ` chenxiaosong.chenxiaosong 2025-11-15 7:45 ` Namjae Jeon 2025-11-13 13:32 ` [PATCH v7 2/2] smb: move FILE_SYSTEM_ATTRIBUTE_INFO to common/fscc.h chenxiaosong.chenxiaosong 1 sibling, 1 reply; 6+ messages in thread From: chenxiaosong.chenxiaosong @ 2025-11-13 13:32 UTC (permalink / raw) To: sfrench, smfrench, linkinjeon, linkinjeon, christophe.jaillet Cc: linux-cifs, linux-kernel, chenxiaosong, ChenXiaoSong From: ChenXiaoSong <chenxiaosong@kylinos.cn> The fields in struct create_durable_reconn_req and struct create_durable are exactly the same, so remove create_durable_reconn_req from server, and use typedef to define both CREATE_DURABLE_REQ and CREATE_DURABLE_RECONN for a single struct. Rename the following places: - struct create_durable -> CREATE_DURABLE_REQ - struct create_durable_reconn_req -> CREATE_DURABLE_RECONN The documentation references are: - SMB2_CREATE_DURABLE_HANDLE_REQUEST in MS-SMB2 2.2.13.2.3 - SMB2_CREATE_DURABLE_HANDLE_RECONNECT in MS-SMB2 2.2.13.2.4 - SMB2_FILEID in MS-SMB2 2.2.14.1 Descriptions of the struct fields: - __u8 Reserved[16]: DurableRequest field of SMB2_CREATE_DURABLE_HANDLE_REQUEST. A 16-byte field that MUST be reserved. - __u64 PersistentFileId: Persistent field of 2.2.14.1 SMB2_FILEID - __u64 VolatileFileId: Volatile field of 2.2.14.1 SMB2_FILEID - struct Fid: Data field of SMB2_CREATE_DURABLE_HANDLE_RECONNECT. An SMB2_FILEID structure, as specified in section 2.2.14.1. Suggested-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn> --- fs/smb/client/smb2pdu.c | 23 +++++++++++------------ fs/smb/common/smb2pdu.h | 4 ++-- fs/smb/server/smb2pdu.c | 6 +++--- fs/smb/server/smb2pdu.h | 12 ------------ 4 files changed, 16 insertions(+), 29 deletions(-) diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c index 62ced22fc5a6..30c391424022 100644 --- a/fs/smb/client/smb2pdu.c +++ b/fs/smb/client/smb2pdu.c @@ -2229,21 +2229,20 @@ SMB2_tdis(const unsigned int xid, struct cifs_tcon *tcon) return rc; } - -static struct create_durable * +static CREATE_DURABLE_REQ * create_durable_buf(void) { - struct create_durable *buf; + CREATE_DURABLE_REQ *buf; - buf = kzalloc(sizeof(struct create_durable), GFP_KERNEL); + buf = kzalloc(sizeof(CREATE_DURABLE_REQ), GFP_KERNEL); if (!buf) return NULL; buf->ccontext.DataOffset = cpu_to_le16(offsetof - (struct create_durable, Data)); + (CREATE_DURABLE_REQ, Data)); buf->ccontext.DataLength = cpu_to_le32(16); buf->ccontext.NameOffset = cpu_to_le16(offsetof - (struct create_durable, Name)); + (CREATE_DURABLE_REQ, Name)); buf->ccontext.NameLength = cpu_to_le16(4); /* SMB2_CREATE_DURABLE_HANDLE_REQUEST is "DHnQ" */ buf->Name[0] = 'D'; @@ -2253,20 +2252,20 @@ create_durable_buf(void) return buf; } -static struct create_durable * +static CREATE_DURABLE_REQ * create_reconnect_durable_buf(struct cifs_fid *fid) { - struct create_durable *buf; + CREATE_DURABLE_REQ *buf; - buf = kzalloc(sizeof(struct create_durable), GFP_KERNEL); + buf = kzalloc(sizeof(CREATE_DURABLE_REQ), GFP_KERNEL); if (!buf) return NULL; buf->ccontext.DataOffset = cpu_to_le16(offsetof - (struct create_durable, Data)); + (CREATE_DURABLE_REQ, Data)); buf->ccontext.DataLength = cpu_to_le32(16); buf->ccontext.NameOffset = cpu_to_le16(offsetof - (struct create_durable, Name)); + (CREATE_DURABLE_REQ, Name)); buf->ccontext.NameLength = cpu_to_le16(4); buf->Data.Fid.PersistentFileId = fid->persistent_fid; buf->Data.Fid.VolatileFileId = fid->volatile_fid; @@ -2552,7 +2551,7 @@ add_durable_context(struct kvec *iov, unsigned int *num_iovec, iov[num].iov_base = create_durable_buf(); if (iov[num].iov_base == NULL) return -ENOMEM; - iov[num].iov_len = sizeof(struct create_durable); + iov[num].iov_len = sizeof(CREATE_DURABLE_REQ); *num_iovec = num + 1; return 0; } diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h index 824d27297bec..d0777fbfd503 100644 --- a/fs/smb/common/smb2pdu.h +++ b/fs/smb/common/smb2pdu.h @@ -1265,7 +1265,7 @@ struct create_posix { } __packed; /* See MS-SMB2 2.2.13.2.3 and MS-SMB2 2.2.13.2.4 */ -struct create_durable { +typedef struct { struct create_context_hdr ccontext; __u8 Name[8]; union { @@ -1275,7 +1275,7 @@ struct create_durable { __u64 VolatileFileId; } Fid; } Data; -} __packed; +} __packed CREATE_DURABLE_REQ, CREATE_DURABLE_RECONN; /* See MS-SMB2 2.2.13.2.5 */ struct create_mxac_req { diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index 95186fa96080..e7edb52e6e40 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -2766,7 +2766,7 @@ static int parse_durable_handle_context(struct ksmbd_work *work, } case DURABLE_RECONN: { - struct create_durable_reconn_req *recon; + CREATE_DURABLE_RECONN *recon; if (dh_info->type == DURABLE_RECONN_V2 || dh_info->type == DURABLE_REQ_V2) { @@ -2776,12 +2776,12 @@ static int parse_durable_handle_context(struct ksmbd_work *work, if (le16_to_cpu(context->DataOffset) + le32_to_cpu(context->DataLength) < - sizeof(struct create_durable_reconn_req)) { + sizeof(CREATE_DURABLE_RECONN)) { err = -EINVAL; goto out; } - recon = (struct create_durable_reconn_req *)context; + recon = (CREATE_DURABLE_RECONN *)context; persistent_id = recon->Data.Fid.PersistentFileId; dh_info->fp = ksmbd_lookup_durable_fd(persistent_id); if (!dh_info->fp) { diff --git a/fs/smb/server/smb2pdu.h b/fs/smb/server/smb2pdu.h index b94de41049f4..66cdc8e4a648 100644 --- a/fs/smb/server/smb2pdu.h +++ b/fs/smb/server/smb2pdu.h @@ -68,18 +68,6 @@ struct preauth_integrity_info { #define DURABLE_HANDLE_MAX_TIMEOUT 300000 -struct create_durable_reconn_req { - struct create_context_hdr ccontext; - __u8 Name[8]; - union { - __u8 Reserved[16]; - struct { - __u64 PersistentFileId; - __u64 VolatileFileId; - } Fid; - } Data; -} __packed; - struct create_alloc_size_req { struct create_context_hdr ccontext; __u8 Name[8]; -- 2.43.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v7 1/2] smb: move CREATE_DURABLE_RECONN to common/smb2pdu.h 2025-11-13 13:32 ` [PATCH v7 1/2] smb: move CREATE_DURABLE_RECONN to common/smb2pdu.h chenxiaosong.chenxiaosong @ 2025-11-15 7:45 ` Namjae Jeon 0 siblings, 0 replies; 6+ messages in thread From: Namjae Jeon @ 2025-11-15 7:45 UTC (permalink / raw) To: chenxiaosong.chenxiaosong Cc: sfrench, smfrench, linkinjeon, christophe.jaillet, linux-cifs, linux-kernel, chenxiaosong, ChenXiaoSong On Thu, Nov 13, 2025 at 10:34 PM <chenxiaosong.chenxiaosong@linux.dev> wrote: > > From: ChenXiaoSong <chenxiaosong@kylinos.cn> > > The fields in struct create_durable_reconn_req and struct create_durable > are exactly the same, so remove create_durable_reconn_req from server, > and use typedef to define both CREATE_DURABLE_REQ and CREATE_DURABLE_RECONN > for a single struct. > > Rename the following places: > > - struct create_durable -> CREATE_DURABLE_REQ > - struct create_durable_reconn_req -> CREATE_DURABLE_RECONN > > The documentation references are: > > - SMB2_CREATE_DURABLE_HANDLE_REQUEST in MS-SMB2 2.2.13.2.3 > - SMB2_CREATE_DURABLE_HANDLE_RECONNECT in MS-SMB2 2.2.13.2.4 > - SMB2_FILEID in MS-SMB2 2.2.14.1 > > Descriptions of the struct fields: > > - __u8 Reserved[16]: DurableRequest field of SMB2_CREATE_DURABLE_HANDLE_REQUEST. > A 16-byte field that MUST be reserved. > - __u64 PersistentFileId: Persistent field of 2.2.14.1 SMB2_FILEID > - __u64 VolatileFileId: Volatile field of 2.2.14.1 SMB2_FILEID > - struct Fid: Data field of SMB2_CREATE_DURABLE_HANDLE_RECONNECT. > An SMB2_FILEID structure, as specified in section 2.2.14.1. > > Suggested-by: Namjae Jeon <linkinjeon@kernel.org> > Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn> I have changed struct names like the following ones and applied it to #ksmbd-for-next-next. - struct create_durable -> create_durable_req_t - struct create_durable_reconn_req -> create_durable_reconn_t Thanks! ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v7 2/2] smb: move FILE_SYSTEM_ATTRIBUTE_INFO to common/fscc.h 2025-11-13 13:32 [PATCH v7 0/2] smb: move duplicate definitions to common header file chenxiaosong.chenxiaosong 2025-11-13 13:32 ` [PATCH v7 1/2] smb: move CREATE_DURABLE_RECONN to common/smb2pdu.h chenxiaosong.chenxiaosong @ 2025-11-13 13:32 ` chenxiaosong.chenxiaosong 2025-11-15 7:41 ` Namjae Jeon 1 sibling, 1 reply; 6+ messages in thread From: chenxiaosong.chenxiaosong @ 2025-11-13 13:32 UTC (permalink / raw) To: sfrench, smfrench, linkinjeon, linkinjeon, christophe.jaillet Cc: linux-cifs, linux-kernel, chenxiaosong, ChenXiaoSong From: ChenXiaoSong <chenxiaosong@kylinos.cn> Modify the following places: - struct filesystem_attribute_info -> FILE_SYSTEM_ATTRIBUTE_INFO - client: remove MIN_FS_ATTR_INFO_SIZE definition, MIN_FS_ATTR_INFO_SIZE -> sizeof(FILE_SYSTEM_ATTRIBUTE_INFO) Then move FILE_SYSTEM_ATTRIBUTE_INFO to common header file. Suggested-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn> --- fs/smb/client/cifspdu.h | 10 ---------- fs/smb/client/smb2pdu.c | 2 +- fs/smb/common/fscc.h | 8 ++++++++ fs/smb/server/smb2pdu.c | 6 +++--- fs/smb/server/smb_common.h | 7 ------- 5 files changed, 12 insertions(+), 21 deletions(-) diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h index d84e10b1477f..49f35cb3cf2e 100644 --- a/fs/smb/client/cifspdu.h +++ b/fs/smb/client/cifspdu.h @@ -2068,16 +2068,6 @@ typedef struct { #define FILE_PORTABLE_DEVICE 0x00004000 #define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000 -/* minimum includes first three fields, and empty FS Name */ -#define MIN_FS_ATTR_INFO_SIZE 12 - -typedef struct { - __le32 Attributes; - __le32 MaxPathNameComponentLength; - __le32 FileSystemNameLen; - char FileSystemName[52]; /* do not have to save this - get subset? */ -} __attribute__((packed)) FILE_SYSTEM_ATTRIBUTE_INFO; - /******************************************************************************/ /* QueryFileInfo/QueryPathinfo (also for SetPath/SetFile) data buffer formats */ /******************************************************************************/ diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c index 30c391424022..4ccc8d1e130d 100644 --- a/fs/smb/client/smb2pdu.c +++ b/fs/smb/client/smb2pdu.c @@ -5982,7 +5982,7 @@ SMB2_QFS_attr(const unsigned int xid, struct cifs_tcon *tcon, min_len = sizeof(FILE_SYSTEM_DEVICE_INFO); } else if (level == FS_ATTRIBUTE_INFORMATION) { max_len = sizeof(FILE_SYSTEM_ATTRIBUTE_INFO); - min_len = MIN_FS_ATTR_INFO_SIZE; + min_len = sizeof(FILE_SYSTEM_ATTRIBUTE_INFO); } else if (level == FS_SECTOR_SIZE_INFORMATION) { max_len = sizeof(struct smb3_fs_ss_info); min_len = sizeof(struct smb3_fs_ss_info); diff --git a/fs/smb/common/fscc.h b/fs/smb/common/fscc.h index a0580a772a41..7eb3f715466d 100644 --- a/fs/smb/common/fscc.h +++ b/fs/smb/common/fscc.h @@ -94,6 +94,14 @@ struct smb2_file_network_open_info { __le32 Reserved; } __packed; /* level 34 Query also similar returned in close rsp and open rsp */ +/* See FS-FSCC 2.5.1 */ +typedef struct { + __le32 Attributes; + __le32 MaxPathNameComponentLength; + __le32 FileSystemNameLen; + __le16 FileSystemName[]; /* do not have to save this - get subset? */ +} __packed FILE_SYSTEM_ATTRIBUTE_INFO; + /* List of FileSystemAttributes - see MS-FSCC 2.5.1 */ #define FILE_SUPPORTS_SPARSE_VDL 0x10000000 /* faster nonsparse extend */ #define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 /* allow ioctl dup extents */ diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index e7edb52e6e40..383fecacfd06 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -5492,10 +5492,10 @@ static int smb2_get_info_filesystem(struct ksmbd_work *work, } case FS_ATTRIBUTE_INFORMATION: { - struct filesystem_attribute_info *info; + FILE_SYSTEM_ATTRIBUTE_INFO *info; size_t sz; - info = (struct filesystem_attribute_info *)rsp->Buffer; + info = (FILE_SYSTEM_ATTRIBUTE_INFO *)rsp->Buffer; info->Attributes = cpu_to_le32(FILE_SUPPORTS_OBJECT_IDS | FILE_PERSISTENT_ACLS | FILE_UNICODE_ON_DISK | @@ -5514,7 +5514,7 @@ static int smb2_get_info_filesystem(struct ksmbd_work *work, "NTFS", PATH_MAX, conn->local_nls, 0); len = len * 2; info->FileSystemNameLen = cpu_to_le32(len); - sz = sizeof(struct filesystem_attribute_info) + len; + sz = sizeof(FILE_SYSTEM_ATTRIBUTE_INFO) + len; rsp->OutputBufferLength = cpu_to_le32(sz); break; } diff --git a/fs/smb/server/smb_common.h b/fs/smb/server/smb_common.h index 4dd573c5f0b2..6c1607b43eb3 100644 --- a/fs/smb/server/smb_common.h +++ b/fs/smb/server/smb_common.h @@ -90,13 +90,6 @@ struct smb_negotiate_rsp { __le16 ByteCount; } __packed; -struct filesystem_attribute_info { - __le32 Attributes; - __le32 MaxPathNameComponentLength; - __le32 FileSystemNameLen; - __le16 FileSystemName[]; /* do not have to save this - get subset? */ -} __packed; - struct filesystem_vol_info { __le64 VolumeCreationTime; __le32 SerialNumber; -- 2.43.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v7 2/2] smb: move FILE_SYSTEM_ATTRIBUTE_INFO to common/fscc.h 2025-11-13 13:32 ` [PATCH v7 2/2] smb: move FILE_SYSTEM_ATTRIBUTE_INFO to common/fscc.h chenxiaosong.chenxiaosong @ 2025-11-15 7:41 ` Namjae Jeon 2025-11-15 8:06 ` ChenXiaoSong 0 siblings, 1 reply; 6+ messages in thread From: Namjae Jeon @ 2025-11-15 7:41 UTC (permalink / raw) To: chenxiaosong.chenxiaosong Cc: sfrench, smfrench, linkinjeon, christophe.jaillet, linux-cifs, linux-kernel, chenxiaosong, ChenXiaoSong On Thu, Nov 13, 2025 at 10:34 PM <chenxiaosong.chenxiaosong@linux.dev> wrote: > > From: ChenXiaoSong <chenxiaosong@kylinos.cn> > > Modify the following places: > > - struct filesystem_attribute_info -> FILE_SYSTEM_ATTRIBUTE_INFO > - client: remove MIN_FS_ATTR_INFO_SIZE definition, > MIN_FS_ATTR_INFO_SIZE -> sizeof(FILE_SYSTEM_ATTRIBUTE_INFO) > > Then move FILE_SYSTEM_ATTRIBUTE_INFO to common header file. > > Suggested-by: Namjae Jeon <linkinjeon@kernel.org> > Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn> > --- > fs/smb/client/cifspdu.h | 10 ---------- > fs/smb/client/smb2pdu.c | 2 +- > fs/smb/common/fscc.h | 8 ++++++++ > fs/smb/server/smb2pdu.c | 6 +++--- > fs/smb/server/smb_common.h | 7 ------- > 5 files changed, 12 insertions(+), 21 deletions(-) > > diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h > index d84e10b1477f..49f35cb3cf2e 100644 > --- a/fs/smb/client/cifspdu.h > +++ b/fs/smb/client/cifspdu.h > @@ -2068,16 +2068,6 @@ typedef struct { > #define FILE_PORTABLE_DEVICE 0x00004000 > #define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000 > > -/* minimum includes first three fields, and empty FS Name */ > -#define MIN_FS_ATTR_INFO_SIZE 12 > - > -typedef struct { > - __le32 Attributes; > - __le32 MaxPathNameComponentLength; > - __le32 FileSystemNameLen; > - char FileSystemName[52]; /* do not have to save this - get subset? */ > -} __attribute__((packed)) FILE_SYSTEM_ATTRIBUTE_INFO; > - > /******************************************************************************/ > /* QueryFileInfo/QueryPathinfo (also for SetPath/SetFile) data buffer formats */ > /******************************************************************************/ > diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c > index 30c391424022..4ccc8d1e130d 100644 > --- a/fs/smb/client/smb2pdu.c > +++ b/fs/smb/client/smb2pdu.c > @@ -5982,7 +5982,7 @@ SMB2_QFS_attr(const unsigned int xid, struct cifs_tcon *tcon, > min_len = sizeof(FILE_SYSTEM_DEVICE_INFO); > } else if (level == FS_ATTRIBUTE_INFORMATION) { > max_len = sizeof(FILE_SYSTEM_ATTRIBUTE_INFO); > - min_len = MIN_FS_ATTR_INFO_SIZE; > + min_len = sizeof(FILE_SYSTEM_ATTRIBUTE_INFO); FILE_SYSTEM_ATTRIBUTE_INFO is being used elsewhere on the smb client, and there are cases where sizeof(FILE_SYSTEM_ATTRIBUTE_INFO) is being used. Will there really be no problems if we change it to flex-array? ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v7 2/2] smb: move FILE_SYSTEM_ATTRIBUTE_INFO to common/fscc.h 2025-11-15 7:41 ` Namjae Jeon @ 2025-11-15 8:06 ` ChenXiaoSong 0 siblings, 0 replies; 6+ messages in thread From: ChenXiaoSong @ 2025-11-15 8:06 UTC (permalink / raw) To: Namjae Jeon, chenxiaosong.chenxiaosong Cc: sfrench, smfrench, linkinjeon, christophe.jaillet, linux-cifs, linux-kernel, chenxiaosong It seems we need to add 52 to `max_len` in the `SMB2_QFS_attr()` function, similar to struct smb3_fs_vol_info. Or we can temporarily use the v5 version for now? v5: https://lore.kernel.org/all/20251102073059.3681026-13-chenxiaosong.chenxiaosong@linux.dev/ Thanks, ChenXiaoSong. On 11/15/25 15:41, Namjae Jeon wrote: > On Thu, Nov 13, 2025 at 10:34 PM <chenxiaosong.chenxiaosong@linux.dev> wrote: >> >> From: ChenXiaoSong <chenxiaosong@kylinos.cn> >> >> Modify the following places: >> >> - struct filesystem_attribute_info -> FILE_SYSTEM_ATTRIBUTE_INFO >> - client: remove MIN_FS_ATTR_INFO_SIZE definition, >> MIN_FS_ATTR_INFO_SIZE -> sizeof(FILE_SYSTEM_ATTRIBUTE_INFO) >> >> Then move FILE_SYSTEM_ATTRIBUTE_INFO to common header file. >> >> Suggested-by: Namjae Jeon <linkinjeon@kernel.org> >> Signed-off-by: ChenXiaoSong <chenxiaosong@kylinos.cn> >> --- >> fs/smb/client/cifspdu.h | 10 ---------- >> fs/smb/client/smb2pdu.c | 2 +- >> fs/smb/common/fscc.h | 8 ++++++++ >> fs/smb/server/smb2pdu.c | 6 +++--- >> fs/smb/server/smb_common.h | 7 ------- >> 5 files changed, 12 insertions(+), 21 deletions(-) >> >> diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h >> index d84e10b1477f..49f35cb3cf2e 100644 >> --- a/fs/smb/client/cifspdu.h >> +++ b/fs/smb/client/cifspdu.h >> @@ -2068,16 +2068,6 @@ typedef struct { >> #define FILE_PORTABLE_DEVICE 0x00004000 >> #define FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL 0x00020000 >> >> -/* minimum includes first three fields, and empty FS Name */ >> -#define MIN_FS_ATTR_INFO_SIZE 12 >> - >> -typedef struct { >> - __le32 Attributes; >> - __le32 MaxPathNameComponentLength; >> - __le32 FileSystemNameLen; >> - char FileSystemName[52]; /* do not have to save this - get subset? */ >> -} __attribute__((packed)) FILE_SYSTEM_ATTRIBUTE_INFO; >> - >> /******************************************************************************/ >> /* QueryFileInfo/QueryPathinfo (also for SetPath/SetFile) data buffer formats */ >> /******************************************************************************/ >> diff --git a/fs/smb/client/smb2pdu.c b/fs/smb/client/smb2pdu.c >> index 30c391424022..4ccc8d1e130d 100644 >> --- a/fs/smb/client/smb2pdu.c >> +++ b/fs/smb/client/smb2pdu.c >> @@ -5982,7 +5982,7 @@ SMB2_QFS_attr(const unsigned int xid, struct cifs_tcon *tcon, >> min_len = sizeof(FILE_SYSTEM_DEVICE_INFO); >> } else if (level == FS_ATTRIBUTE_INFORMATION) { >> max_len = sizeof(FILE_SYSTEM_ATTRIBUTE_INFO); >> - min_len = MIN_FS_ATTR_INFO_SIZE; >> + min_len = sizeof(FILE_SYSTEM_ATTRIBUTE_INFO); > FILE_SYSTEM_ATTRIBUTE_INFO is being used elsewhere on the smb client, > and there are cases where sizeof(FILE_SYSTEM_ATTRIBUTE_INFO) is being > used. Will there really be no problems if we change it to flex-array? ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-11-15 8:07 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-11-13 13:32 [PATCH v7 0/2] smb: move duplicate definitions to common header file chenxiaosong.chenxiaosong 2025-11-13 13:32 ` [PATCH v7 1/2] smb: move CREATE_DURABLE_RECONN to common/smb2pdu.h chenxiaosong.chenxiaosong 2025-11-15 7:45 ` Namjae Jeon 2025-11-13 13:32 ` [PATCH v7 2/2] smb: move FILE_SYSTEM_ATTRIBUTE_INFO to common/fscc.h chenxiaosong.chenxiaosong 2025-11-15 7:41 ` Namjae Jeon 2025-11-15 8:06 ` ChenXiaoSong
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).