Skip to content

Commit 26a2787

Browse files
Ronnie SahlbergSteve French
authored andcommitted
ksmbd: Use the SMB3_Create definitions from the shared
Acked-by: Namjae Jeon <[email protected]> Signed-off-by: Ronnie Sahlberg <[email protected]> Signed-off-by: Steve French <[email protected]>
1 parent 699230f commit 26a2787

File tree

5 files changed

+37
-265
lines changed

5 files changed

+37
-265
lines changed

fs/ksmbd/smb2pdu.c

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -713,17 +713,17 @@ static int smb2_get_dos_mode(struct kstat *stat, int attribute)
713713
int attr = 0;
714714

715715
if (S_ISDIR(stat->mode)) {
716-
attr = ATTR_DIRECTORY |
717-
(attribute & (ATTR_HIDDEN | ATTR_SYSTEM));
716+
attr = FILE_ATTRIBUTE_DIRECTORY |
717+
(attribute & (FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM));
718718
} else {
719-
attr = (attribute & 0x00005137) | ATTR_ARCHIVE;
720-
attr &= ~(ATTR_DIRECTORY);
719+
attr = (attribute & 0x00005137) | FILE_ATTRIBUTE_ARCHIVE;
720+
attr &= ~(FILE_ATTRIBUTE_DIRECTORY);
721721
if (S_ISREG(stat->mode) && (server_conf.share_fake_fscaps &
722722
FILE_SUPPORTS_SPARSE_FILES))
723-
attr |= ATTR_SPARSE;
723+
attr |= FILE_ATTRIBUTE_SPARSE_FILE;
724724

725725
if (smb2_get_reparse_tag_special_file(stat->mode))
726-
attr |= ATTR_REPARSE;
726+
attr |= FILE_ATTRIBUTE_REPARSE_POINT;
727727
}
728728

729729
return attr;
@@ -2098,15 +2098,15 @@ static noinline int create_smb2_pipe(struct ksmbd_work *work)
20982098
rsp->hdr.Status = STATUS_SUCCESS;
20992099
rsp->StructureSize = cpu_to_le16(89);
21002100
rsp->OplockLevel = SMB2_OPLOCK_LEVEL_NONE;
2101-
rsp->Reserved = 0;
2101+
rsp->Flags = 0;
21022102
rsp->CreateAction = cpu_to_le32(FILE_OPENED);
21032103

21042104
rsp->CreationTime = cpu_to_le64(0);
21052105
rsp->LastAccessTime = cpu_to_le64(0);
21062106
rsp->ChangeTime = cpu_to_le64(0);
21072107
rsp->AllocationSize = cpu_to_le64(0);
21082108
rsp->EndofFile = cpu_to_le64(0);
2109-
rsp->FileAttributes = ATTR_NORMAL_LE;
2109+
rsp->FileAttributes = FILE_ATTRIBUTE_NORMAL_LE;
21102110
rsp->Reserved2 = 0;
21112111
rsp->VolatileFileId = cpu_to_le64(id);
21122112
rsp->PersistentFileId = 0;
@@ -2352,7 +2352,7 @@ static void smb2_update_xattrs(struct ksmbd_tree_connect *tcon,
23522352
struct xattr_dos_attrib da;
23532353
int rc;
23542354

2355-
fp->f_ci->m_fattr &= ~(ATTR_HIDDEN_LE | ATTR_SYSTEM_LE);
2355+
fp->f_ci->m_fattr &= ~(FILE_ATTRIBUTE_HIDDEN_LE | FILE_ATTRIBUTE_SYSTEM_LE);
23562356

23572357
/* get FileAttributes from XATTR_NAME_DOS_ATTRIBUTE */
23582358
if (!test_share_config_flag(tcon->share_conf,
@@ -2557,15 +2557,15 @@ int smb2_open(struct ksmbd_work *work)
25572557
if (req_op_level == SMB2_OPLOCK_LEVEL_LEASE)
25582558
lc = parse_lease_state(req);
25592559

2560-
if (le32_to_cpu(req->ImpersonationLevel) > le32_to_cpu(IL_DELEGATE_LE)) {
2560+
if (le32_to_cpu(req->ImpersonationLevel) > le32_to_cpu(IL_DELEGATE)) {
25612561
pr_err("Invalid impersonationlevel : 0x%x\n",
25622562
le32_to_cpu(req->ImpersonationLevel));
25632563
rc = -EIO;
25642564
rsp->hdr.Status = STATUS_BAD_IMPERSONATION_LEVEL;
25652565
goto err_out1;
25662566
}
25672567

2568-
if (req->CreateOptions && !(req->CreateOptions & CREATE_OPTIONS_MASK)) {
2568+
if (req->CreateOptions && !(req->CreateOptions & CREATE_OPTIONS_MASK_LE)) {
25692569
pr_err("Invalid create options : 0x%x\n",
25702570
le32_to_cpu(req->CreateOptions));
25712571
rc = -EINVAL;
@@ -2607,7 +2607,7 @@ int smb2_open(struct ksmbd_work *work)
26072607
goto err_out1;
26082608
}
26092609

2610-
if (req->FileAttributes && !(req->FileAttributes & ATTR_MASK_LE)) {
2610+
if (req->FileAttributes && !(req->FileAttributes & FILE_ATTRIBUTE_MASK_LE)) {
26112611
pr_err("Invalid file attribute : 0x%x\n",
26122612
le32_to_cpu(req->FileAttributes));
26132613
rc = -EINVAL;
@@ -2738,7 +2738,7 @@ int smb2_open(struct ksmbd_work *work)
27382738
}
27392739

27402740
if (req->CreateOptions & FILE_DIRECTORY_FILE_LE &&
2741-
req->FileAttributes & ATTR_NORMAL_LE) {
2741+
req->FileAttributes & FILE_ATTRIBUTE_NORMAL_LE) {
27422742
rsp->hdr.Status = STATUS_NOT_A_DIRECTORY;
27432743
rc = -EIO;
27442744
}
@@ -3117,7 +3117,7 @@ int smb2_open(struct ksmbd_work *work)
31173117
opinfo = rcu_dereference(fp->f_opinfo);
31183118
rsp->OplockLevel = opinfo != NULL ? opinfo->level : 0;
31193119
rcu_read_unlock();
3120-
rsp->Reserved = 0;
3120+
rsp->Flags = 0;
31213121
rsp->CreateAction = cpu_to_le32(file_info);
31223122
rsp->CreationTime = cpu_to_le64(fp->create_time);
31233123
time = ksmbd_UnixTimeToNT(stat.atime);
@@ -3423,9 +3423,9 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
34233423
ffdinfo->EaSize =
34243424
smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode);
34253425
if (ffdinfo->EaSize)
3426-
ffdinfo->ExtFileAttributes = ATTR_REPARSE_POINT_LE;
3426+
ffdinfo->ExtFileAttributes = FILE_ATTRIBUTE_REPARSE_POINT_LE;
34273427
if (d_info->hide_dot_file && d_info->name[0] == '.')
3428-
ffdinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
3428+
ffdinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
34293429
memcpy(ffdinfo->FileName, conv_name, conv_len);
34303430
ffdinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
34313431
break;
@@ -3439,11 +3439,11 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
34393439
fbdinfo->EaSize =
34403440
smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode);
34413441
if (fbdinfo->EaSize)
3442-
fbdinfo->ExtFileAttributes = ATTR_REPARSE_POINT_LE;
3442+
fbdinfo->ExtFileAttributes = FILE_ATTRIBUTE_REPARSE_POINT_LE;
34433443
fbdinfo->ShortNameLength = 0;
34443444
fbdinfo->Reserved = 0;
34453445
if (d_info->hide_dot_file && d_info->name[0] == '.')
3446-
fbdinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
3446+
fbdinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
34473447
memcpy(fbdinfo->FileName, conv_name, conv_len);
34483448
fbdinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
34493449
break;
@@ -3455,7 +3455,7 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
34553455
fdinfo = (struct file_directory_info *)kstat;
34563456
fdinfo->FileNameLength = cpu_to_le32(conv_len);
34573457
if (d_info->hide_dot_file && d_info->name[0] == '.')
3458-
fdinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
3458+
fdinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
34593459
memcpy(fdinfo->FileName, conv_name, conv_len);
34603460
fdinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
34613461
break;
@@ -3479,11 +3479,11 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
34793479
dinfo->EaSize =
34803480
smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode);
34813481
if (dinfo->EaSize)
3482-
dinfo->ExtFileAttributes = ATTR_REPARSE_POINT_LE;
3482+
dinfo->ExtFileAttributes = FILE_ATTRIBUTE_REPARSE_POINT_LE;
34833483
dinfo->Reserved = 0;
34843484
dinfo->UniqueId = cpu_to_le64(ksmbd_kstat->kstat->ino);
34853485
if (d_info->hide_dot_file && d_info->name[0] == '.')
3486-
dinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
3486+
dinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
34873487
memcpy(dinfo->FileName, conv_name, conv_len);
34883488
dinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
34893489
break;
@@ -3497,13 +3497,13 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
34973497
fibdinfo->EaSize =
34983498
smb2_get_reparse_tag_special_file(ksmbd_kstat->kstat->mode);
34993499
if (fibdinfo->EaSize)
3500-
fibdinfo->ExtFileAttributes = ATTR_REPARSE_POINT_LE;
3500+
fibdinfo->ExtFileAttributes = FILE_ATTRIBUTE_REPARSE_POINT_LE;
35013501
fibdinfo->UniqueId = cpu_to_le64(ksmbd_kstat->kstat->ino);
35023502
fibdinfo->ShortNameLength = 0;
35033503
fibdinfo->Reserved = 0;
35043504
fibdinfo->Reserved2 = cpu_to_le16(0);
35053505
if (d_info->hide_dot_file && d_info->name[0] == '.')
3506-
fibdinfo->ExtFileAttributes |= ATTR_HIDDEN_LE;
3506+
fibdinfo->ExtFileAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
35073507
memcpy(fibdinfo->FileName, conv_name, conv_len);
35083508
fibdinfo->NextEntryOffset = cpu_to_le32(next_entry_offset);
35093509
break;
@@ -3529,9 +3529,10 @@ static int smb2_populate_readdir_entry(struct ksmbd_conn *conn, int info_level,
35293529
posix_info->Mode = cpu_to_le32(ksmbd_kstat->kstat->mode);
35303530
posix_info->Inode = cpu_to_le64(ksmbd_kstat->kstat->ino);
35313531
posix_info->DosAttributes =
3532-
S_ISDIR(ksmbd_kstat->kstat->mode) ? ATTR_DIRECTORY_LE : ATTR_ARCHIVE_LE;
3532+
S_ISDIR(ksmbd_kstat->kstat->mode) ?
3533+
FILE_ATTRIBUTE_DIRECTORY_LE : FILE_ATTRIBUTE_ARCHIVE_LE;
35333534
if (d_info->hide_dot_file && d_info->name[0] == '.')
3534-
posix_info->DosAttributes |= ATTR_HIDDEN_LE;
3535+
posix_info->DosAttributes |= FILE_ATTRIBUTE_HIDDEN_LE;
35353536
id_to_sid(from_kuid_munged(&init_user_ns, ksmbd_kstat->kstat->uid),
35363537
SIDNFS_USER, (struct smb_sid *)&posix_info->SidBuffer[0]);
35373538
id_to_sid(from_kgid_munged(&init_user_ns, ksmbd_kstat->kstat->gid),
@@ -5577,14 +5578,14 @@ static int set_file_basic_info(struct ksmbd_file *fp,
55775578

55785579
if (file_info->Attributes) {
55795580
if (!S_ISDIR(inode->i_mode) &&
5580-
file_info->Attributes & ATTR_DIRECTORY_LE) {
5581+
file_info->Attributes & FILE_ATTRIBUTE_DIRECTORY_LE) {
55815582
pr_err("can't change a file to a directory\n");
55825583
return -EINVAL;
55835584
}
55845585

5585-
if (!(S_ISDIR(inode->i_mode) && file_info->Attributes == ATTR_NORMAL_LE))
5586+
if (!(S_ISDIR(inode->i_mode) && file_info->Attributes == FILE_ATTRIBUTE_NORMAL_LE))
55865587
fp->f_ci->m_fattr = file_info->Attributes |
5587-
(fp->f_ci->m_fattr & ATTR_DIRECTORY_LE);
5588+
(fp->f_ci->m_fattr & FILE_ATTRIBUTE_DIRECTORY_LE);
55885589
}
55895590

55905591
if (test_share_config_flag(share, KSMBD_SHARE_FLAG_STORE_DOS_ATTRS) &&
@@ -5805,9 +5806,7 @@ static int set_file_mode_info(struct ksmbd_file *fp,
58055806

58065807
mode = file_info->Mode;
58075808

5808-
if ((mode & ~FILE_MODE_INFO_MASK) ||
5809-
(mode & FILE_SYNCHRONOUS_IO_ALERT_LE &&
5810-
mode & FILE_SYNCHRONOUS_IO_NONALERT_LE)) {
5809+
if ((mode & ~FILE_MODE_INFO_MASK)) {
58115810
pr_err("Mode is not valid : 0x%x\n", le32_to_cpu(mode));
58125811
return -EINVAL;
58135812
}
@@ -7444,9 +7443,9 @@ static inline int fsctl_set_sparse(struct ksmbd_work *work, u64 id,
74447443

74457444
old_fattr = fp->f_ci->m_fattr;
74467445
if (sparse->SetSparse)
7447-
fp->f_ci->m_fattr |= ATTR_SPARSE_FILE_LE;
7446+
fp->f_ci->m_fattr |= FILE_ATTRIBUTE_SPARSE_FILE_LE;
74487447
else
7449-
fp->f_ci->m_fattr &= ~ATTR_SPARSE_FILE_LE;
7448+
fp->f_ci->m_fattr &= ~FILE_ATTRIBUTE_SPARSE_FILE_LE;
74507449

74517450
if (fp->f_ci->m_fattr != old_fattr &&
74527451
test_share_config_flag(work->tcon->share_conf,

fs/ksmbd/smb2pdu.h

Lines changed: 1 addition & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -101,157 +101,6 @@ struct preauth_integrity_info {
101101
#define SMB2_SESSION_IN_PROGRESS BIT(0)
102102
#define SMB2_SESSION_VALID BIT(1)
103103

104-
#define ATTR_READONLY_LE cpu_to_le32(ATTR_READONLY)
105-
#define ATTR_HIDDEN_LE cpu_to_le32(ATTR_HIDDEN)
106-
#define ATTR_SYSTEM_LE cpu_to_le32(ATTR_SYSTEM)
107-
#define ATTR_DIRECTORY_LE cpu_to_le32(ATTR_DIRECTORY)
108-
#define ATTR_ARCHIVE_LE cpu_to_le32(ATTR_ARCHIVE)
109-
#define ATTR_NORMAL_LE cpu_to_le32(ATTR_NORMAL)
110-
#define ATTR_TEMPORARY_LE cpu_to_le32(ATTR_TEMPORARY)
111-
#define ATTR_SPARSE_FILE_LE cpu_to_le32(ATTR_SPARSE)
112-
#define ATTR_REPARSE_POINT_LE cpu_to_le32(ATTR_REPARSE)
113-
#define ATTR_COMPRESSED_LE cpu_to_le32(ATTR_COMPRESSED)
114-
#define ATTR_OFFLINE_LE cpu_to_le32(ATTR_OFFLINE)
115-
#define ATTR_NOT_CONTENT_INDEXED_LE cpu_to_le32(ATTR_NOT_CONTENT_INDEXED)
116-
#define ATTR_ENCRYPTED_LE cpu_to_le32(ATTR_ENCRYPTED)
117-
#define ATTR_INTEGRITY_STREAML_LE cpu_to_le32(0x00008000)
118-
#define ATTR_NO_SCRUB_DATA_LE cpu_to_le32(0x00020000)
119-
#define ATTR_MASK_LE cpu_to_le32(0x00007FB7)
120-
121-
/* Oplock levels */
122-
#define SMB2_OPLOCK_LEVEL_NONE 0x00
123-
#define SMB2_OPLOCK_LEVEL_II 0x01
124-
#define SMB2_OPLOCK_LEVEL_EXCLUSIVE 0x08
125-
#define SMB2_OPLOCK_LEVEL_BATCH 0x09
126-
#define SMB2_OPLOCK_LEVEL_LEASE 0xFF
127-
/* Non-spec internal type */
128-
#define SMB2_OPLOCK_LEVEL_NOCHANGE 0x99
129-
130-
/* Desired Access Flags */
131-
#define FILE_READ_DATA_LE cpu_to_le32(0x00000001)
132-
#define FILE_LIST_DIRECTORY_LE cpu_to_le32(0x00000001)
133-
#define FILE_WRITE_DATA_LE cpu_to_le32(0x00000002)
134-
#define FILE_ADD_FILE_LE cpu_to_le32(0x00000002)
135-
#define FILE_APPEND_DATA_LE cpu_to_le32(0x00000004)
136-
#define FILE_ADD_SUBDIRECTORY_LE cpu_to_le32(0x00000004)
137-
#define FILE_READ_EA_LE cpu_to_le32(0x00000008)
138-
#define FILE_WRITE_EA_LE cpu_to_le32(0x00000010)
139-
#define FILE_EXECUTE_LE cpu_to_le32(0x00000020)
140-
#define FILE_TRAVERSE_LE cpu_to_le32(0x00000020)
141-
#define FILE_DELETE_CHILD_LE cpu_to_le32(0x00000040)
142-
#define FILE_READ_ATTRIBUTES_LE cpu_to_le32(0x00000080)
143-
#define FILE_WRITE_ATTRIBUTES_LE cpu_to_le32(0x00000100)
144-
#define FILE_DELETE_LE cpu_to_le32(0x00010000)
145-
#define FILE_READ_CONTROL_LE cpu_to_le32(0x00020000)
146-
#define FILE_WRITE_DAC_LE cpu_to_le32(0x00040000)
147-
#define FILE_WRITE_OWNER_LE cpu_to_le32(0x00080000)
148-
#define FILE_SYNCHRONIZE_LE cpu_to_le32(0x00100000)
149-
#define FILE_ACCESS_SYSTEM_SECURITY_LE cpu_to_le32(0x01000000)
150-
#define FILE_MAXIMAL_ACCESS_LE cpu_to_le32(0x02000000)
151-
#define FILE_GENERIC_ALL_LE cpu_to_le32(0x10000000)
152-
#define FILE_GENERIC_EXECUTE_LE cpu_to_le32(0x20000000)
153-
#define FILE_GENERIC_WRITE_LE cpu_to_le32(0x40000000)
154-
#define FILE_GENERIC_READ_LE cpu_to_le32(0x80000000)
155-
#define DESIRED_ACCESS_MASK cpu_to_le32(0xF21F01FF)
156-
157-
/* ShareAccess Flags */
158-
#define FILE_SHARE_READ_LE cpu_to_le32(0x00000001)
159-
#define FILE_SHARE_WRITE_LE cpu_to_le32(0x00000002)
160-
#define FILE_SHARE_DELETE_LE cpu_to_le32(0x00000004)
161-
#define FILE_SHARE_ALL_LE cpu_to_le32(0x00000007)
162-
163-
/* CreateDisposition Flags */
164-
#define FILE_SUPERSEDE_LE cpu_to_le32(0x00000000)
165-
#define FILE_OPEN_LE cpu_to_le32(0x00000001)
166-
#define FILE_CREATE_LE cpu_to_le32(0x00000002)
167-
#define FILE_OPEN_IF_LE cpu_to_le32(0x00000003)
168-
#define FILE_OVERWRITE_LE cpu_to_le32(0x00000004)
169-
#define FILE_OVERWRITE_IF_LE cpu_to_le32(0x00000005)
170-
#define FILE_CREATE_MASK_LE cpu_to_le32(0x00000007)
171-
172-
#define FILE_READ_DESIRED_ACCESS_LE (FILE_READ_DATA_LE | \
173-
FILE_READ_EA_LE | \
174-
FILE_GENERIC_READ_LE)
175-
#define FILE_WRITE_DESIRE_ACCESS_LE (FILE_WRITE_DATA_LE | \
176-
FILE_APPEND_DATA_LE | \
177-
FILE_WRITE_EA_LE | \
178-
FILE_WRITE_ATTRIBUTES_LE | \
179-
FILE_GENERIC_WRITE_LE)
180-
181-
/* Impersonation Levels */
182-
#define IL_ANONYMOUS_LE cpu_to_le32(0x00000000)
183-
#define IL_IDENTIFICATION_LE cpu_to_le32(0x00000001)
184-
#define IL_IMPERSONATION_LE cpu_to_le32(0x00000002)
185-
#define IL_DELEGATE_LE cpu_to_le32(0x00000003)
186-
187-
/* Create Context Values */
188-
#define SMB2_CREATE_EA_BUFFER "ExtA" /* extended attributes */
189-
#define SMB2_CREATE_SD_BUFFER "SecD" /* security descriptor */
190-
#define SMB2_CREATE_DURABLE_HANDLE_REQUEST "DHnQ"
191-
#define SMB2_CREATE_DURABLE_HANDLE_RECONNECT "DHnC"
192-
#define SMB2_CREATE_ALLOCATION_SIZE "AlSi"
193-
#define SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST "MxAc"
194-
#define SMB2_CREATE_TIMEWARP_REQUEST "TWrp"
195-
#define SMB2_CREATE_QUERY_ON_DISK_ID "QFid"
196-
#define SMB2_CREATE_REQUEST_LEASE "RqLs"
197-
#define SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 "DH2Q"
198-
#define SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2 "DH2C"
199-
#define SMB2_CREATE_APP_INSTANCE_ID "\x45\xBC\xA6\x6A\xEF\xA7\xF7\x4A\x90\x08\xFA\x46\x2E\x14\x4D\x74"
200-
#define SMB2_CREATE_APP_INSTANCE_VERSION "\xB9\x82\xD0\xB7\x3B\x56\x07\x4F\xA0\x7B\x52\x4A\x81\x16\xA0\x10"
201-
#define SVHDX_OPEN_DEVICE_CONTEXT 0x83CE6F1AD851E0986E34401CC9BCFCE9
202-
#define SMB2_CREATE_TAG_POSIX "\x93\xAD\x25\x50\x9C\xB4\x11\xE7\xB4\x23\x83\xDE\x96\x8B\xCD\x7C"
203-
204-
struct smb2_create_req {
205-
struct smb2_hdr hdr;
206-
__le16 StructureSize; /* Must be 57 */
207-
__u8 SecurityFlags;
208-
__u8 RequestedOplockLevel;
209-
__le32 ImpersonationLevel;
210-
__le64 SmbCreateFlags;
211-
__le64 Reserved;
212-
__le32 DesiredAccess;
213-
__le32 FileAttributes;
214-
__le32 ShareAccess;
215-
__le32 CreateDisposition;
216-
__le32 CreateOptions;
217-
__le16 NameOffset;
218-
__le16 NameLength;
219-
__le32 CreateContextsOffset;
220-
__le32 CreateContextsLength;
221-
__u8 Buffer[0];
222-
} __packed;
223-
224-
struct smb2_create_rsp {
225-
struct smb2_hdr hdr;
226-
__le16 StructureSize; /* Must be 89 */
227-
__u8 OplockLevel;
228-
__u8 Reserved;
229-
__le32 CreateAction;
230-
__le64 CreationTime;
231-
__le64 LastAccessTime;
232-
__le64 LastWriteTime;
233-
__le64 ChangeTime;
234-
__le64 AllocationSize;
235-
__le64 EndofFile;
236-
__le32 FileAttributes;
237-
__le32 Reserved2;
238-
__le64 PersistentFileId;
239-
__le64 VolatileFileId;
240-
__le32 CreateContextsOffset;
241-
__le32 CreateContextsLength;
242-
__u8 Buffer[1];
243-
} __packed;
244-
245-
struct create_context {
246-
__le32 Next;
247-
__le16 NameOffset;
248-
__le16 NameLength;
249-
__le16 Reserved;
250-
__le16 DataOffset;
251-
__le32 DataLength;
252-
__u8 Buffer[0];
253-
} __packed;
254-
255104
struct create_durable_req_v2 {
256105
struct create_context ccontext;
257106
__u8 Name[8];
@@ -1012,7 +861,7 @@ struct smb2_file_pos_info {
1012861
__le64 CurrentByteOffset;
1013862
} __packed;
1014863

1015-
#define FILE_MODE_INFO_MASK cpu_to_le32(0x0000103e)
864+
#define FILE_MODE_INFO_MASK cpu_to_le32(0x0000100e)
1016865

1017866
struct smb2_file_mode_info {
1018867
__le32 Mode;

0 commit comments

Comments
 (0)