@@ -115,226 +115,6 @@ struct share_redirect_error_context_rsp {
115
115
/* __u8 ResourceName[] */ /* Name of share as counted Unicode string */
116
116
} __packed ;
117
117
118
- #define SMB2_CLIENT_GUID_SIZE 16
119
-
120
- struct smb2_negotiate_req {
121
- struct smb2_hdr hdr ;
122
- __le16 StructureSize ; /* Must be 36 */
123
- __le16 DialectCount ;
124
- __le16 SecurityMode ;
125
- __le16 Reserved ; /* MBZ */
126
- __le32 Capabilities ;
127
- __u8 ClientGUID [SMB2_CLIENT_GUID_SIZE ];
128
- /* In SMB3.02 and earlier next three were MBZ le64 ClientStartTime */
129
- __le32 NegotiateContextOffset ; /* SMB3.1.1 only. MBZ earlier */
130
- __le16 NegotiateContextCount ; /* SMB3.1.1 only. MBZ earlier */
131
- __le16 Reserved2 ;
132
- __le16 Dialects [4 ]; /* BB expand this if autonegotiate > 4 dialects */
133
- } __packed ;
134
-
135
- /* Dialects */
136
- #define SMB10_PROT_ID 0x0000 /* local only, not sent on wire w/CIFS negprot */
137
- #define SMB20_PROT_ID 0x0202
138
- #define SMB21_PROT_ID 0x0210
139
- #define SMB30_PROT_ID 0x0300
140
- #define SMB302_PROT_ID 0x0302
141
- #define SMB311_PROT_ID 0x0311
142
- #define BAD_PROT_ID 0xFFFF
143
-
144
- /* SecurityMode flags */
145
- #define SMB2_NEGOTIATE_SIGNING_ENABLED 0x0001
146
- #define SMB2_NEGOTIATE_SIGNING_REQUIRED 0x0002
147
- #define SMB2_SEC_MODE_FLAGS_ALL 0x0003
148
-
149
- /* Capabilities flags */
150
- #define SMB2_GLOBAL_CAP_DFS 0x00000001
151
- #define SMB2_GLOBAL_CAP_LEASING 0x00000002 /* Resp only New to SMB2.1 */
152
- #define SMB2_GLOBAL_CAP_LARGE_MTU 0X00000004 /* Resp only New to SMB2.1 */
153
- #define SMB2_GLOBAL_CAP_MULTI_CHANNEL 0x00000008 /* New to SMB3 */
154
- #define SMB2_GLOBAL_CAP_PERSISTENT_HANDLES 0x00000010 /* New to SMB3 */
155
- #define SMB2_GLOBAL_CAP_DIRECTORY_LEASING 0x00000020 /* New to SMB3 */
156
- #define SMB2_GLOBAL_CAP_ENCRYPTION 0x00000040 /* New to SMB3 */
157
- /* Internal types */
158
- #define SMB2_NT_FIND 0x00100000
159
- #define SMB2_LARGE_FILES 0x00200000
160
-
161
-
162
- /* Negotiate Contexts - ContextTypes. See MS-SMB2 section 2.2.3.1 for details */
163
- #define SMB2_PREAUTH_INTEGRITY_CAPABILITIES cpu_to_le16(1)
164
- #define SMB2_ENCRYPTION_CAPABILITIES cpu_to_le16(2)
165
- #define SMB2_COMPRESSION_CAPABILITIES cpu_to_le16(3)
166
- #define SMB2_NETNAME_NEGOTIATE_CONTEXT_ID cpu_to_le16(5)
167
- #define SMB2_TRANSPORT_CAPABILITIES cpu_to_le16(6)
168
- #define SMB2_RDMA_TRANSFORM_CAPABILITIES cpu_to_le16(7)
169
- #define SMB2_SIGNING_CAPABILITIES cpu_to_le16(8)
170
- #define SMB2_POSIX_EXTENSIONS_AVAILABLE cpu_to_le16(0x100)
171
-
172
- struct smb2_neg_context {
173
- __le16 ContextType ;
174
- __le16 DataLength ;
175
- __le32 Reserved ;
176
- /* Followed by array of data. NOTE: some servers require padding to 8 byte boundary */
177
- } __packed ;
178
-
179
- #define SMB311_LINUX_CLIENT_SALT_SIZE 32
180
- /* Hash Algorithm Types */
181
- #define SMB2_PREAUTH_INTEGRITY_SHA512 cpu_to_le16(0x0001)
182
- #define SMB2_PREAUTH_HASH_SIZE 64
183
-
184
- /*
185
- * SaltLength that the server send can be zero, so the only three required
186
- * fields (all __le16) end up six bytes total, so the minimum context data len
187
- * in the response is six bytes which accounts for
188
- *
189
- * HashAlgorithmCount, SaltLength, and 1 HashAlgorithm.
190
- */
191
- #define MIN_PREAUTH_CTXT_DATA_LEN 6
192
-
193
- struct smb2_preauth_neg_context {
194
- __le16 ContextType ; /* 1 */
195
- __le16 DataLength ;
196
- __le32 Reserved ;
197
- __le16 HashAlgorithmCount ; /* 1 */
198
- __le16 SaltLength ;
199
- __le16 HashAlgorithms ; /* HashAlgorithms[0] since only one defined */
200
- __u8 Salt [SMB311_LINUX_CLIENT_SALT_SIZE ];
201
- } __packed ;
202
-
203
- /* Encryption Algorithms Ciphers */
204
- #define SMB2_ENCRYPTION_AES128_CCM cpu_to_le16(0x0001)
205
- #define SMB2_ENCRYPTION_AES128_GCM cpu_to_le16(0x0002)
206
- /* we currently do not request AES256_CCM since presumably GCM faster */
207
- #define SMB2_ENCRYPTION_AES256_CCM cpu_to_le16(0x0003)
208
- #define SMB2_ENCRYPTION_AES256_GCM cpu_to_le16(0x0004)
209
-
210
- /* Min encrypt context data is one cipher so 2 bytes + 2 byte count field */
211
- #define MIN_ENCRYPT_CTXT_DATA_LEN 4
212
- struct smb2_encryption_neg_context {
213
- __le16 ContextType ; /* 2 */
214
- __le16 DataLength ;
215
- __le32 Reserved ;
216
- /* CipherCount usally 2, but can be 3 when AES256-GCM enabled */
217
- __le16 CipherCount ; /* AES128-GCM and AES128-CCM by default */
218
- __le16 Ciphers [3 ];
219
- } __packed ;
220
-
221
- /* See MS-SMB2 2.2.3.1.3 */
222
- #define SMB3_COMPRESS_NONE cpu_to_le16(0x0000)
223
- #define SMB3_COMPRESS_LZNT1 cpu_to_le16(0x0001)
224
- #define SMB3_COMPRESS_LZ77 cpu_to_le16(0x0002)
225
- #define SMB3_COMPRESS_LZ77_HUFF cpu_to_le16(0x0003)
226
- /* Pattern scanning algorithm See MS-SMB2 3.1.4.4.1 */
227
- #define SMB3_COMPRESS_PATTERN cpu_to_le16(0x0004) /* Pattern_V1 */
228
-
229
- /* Compression Flags */
230
- #define SMB2_COMPRESSION_CAPABILITIES_FLAG_NONE cpu_to_le32(0x00000000)
231
- #define SMB2_COMPRESSION_CAPABILITIES_FLAG_CHAINED cpu_to_le32(0x00000001)
232
-
233
- struct smb2_compression_capabilities_context {
234
- __le16 ContextType ; /* 3 */
235
- __le16 DataLength ;
236
- __u32 Reserved ;
237
- __le16 CompressionAlgorithmCount ;
238
- __u16 Padding ;
239
- __u32 Flags ;
240
- __le16 CompressionAlgorithms [3 ];
241
- __u16 Pad ; /* Some servers require pad to DataLen multiple of 8 */
242
- /* Check if pad needed */
243
- } __packed ;
244
-
245
- /*
246
- * For smb2_netname_negotiate_context_id See MS-SMB2 2.2.3.1.4.
247
- * Its struct simply contains NetName, an array of Unicode characters
248
- */
249
- struct smb2_netname_neg_context {
250
- __le16 ContextType ; /* 5 */
251
- __le16 DataLength ;
252
- __le32 Reserved ;
253
- __le16 NetName []; /* hostname of target converted to UCS-2 */
254
- } __packed ;
255
-
256
- /*
257
- * For smb2_transport_capabilities context see MS-SMB2 2.2.3.1.5
258
- * and 2.2.4.1.5
259
- */
260
-
261
- /* Flags */
262
- #define SMB2_ACCEPT_TRANSFORM_LEVEL_SECURITY 0x00000001
263
-
264
- struct smb2_transport_capabilities_context {
265
- __le16 ContextType ; /* 6 */
266
- __le16 DataLength ;
267
- __u32 Reserved ;
268
- __le32 Flags ;
269
- __u32 Pad ;
270
- } __packed ;
271
-
272
- /*
273
- * For rdma transform capabilities context see MS-SMB2 2.2.3.1.6
274
- * and 2.2.4.1.6
275
- */
276
-
277
- /* RDMA Transform IDs */
278
- #define SMB2_RDMA_TRANSFORM_NONE 0x0000
279
- #define SMB2_RDMA_TRANSFORM_ENCRYPTION 0x0001
280
- #define SMB2_RDMA_TRANSFORM_SIGNING 0x0002
281
-
282
- struct smb2_rdma_transform_capabilities_context {
283
- __le16 ContextType ; /* 7 */
284
- __le16 DataLength ;
285
- __u32 Reserved ;
286
- __le16 TransformCount ;
287
- __u16 Reserved1 ;
288
- __u32 Reserved2 ;
289
- __le16 RDMATransformIds [];
290
- } __packed ;
291
-
292
- /*
293
- * For signing capabilities context see MS-SMB2 2.2.3.1.7
294
- * and 2.2.4.1.7
295
- */
296
-
297
- /* Signing algorithms */
298
- #define SIGNING_ALG_HMAC_SHA256 0
299
- #define SIGNING_ALG_AES_CMAC 1
300
- #define SIGNING_ALG_AES_GMAC 2
301
-
302
- struct smb2_signing_capabilities {
303
- __le16 ContextType ; /* 8 */
304
- __le16 DataLength ;
305
- __u32 Reserved ;
306
- __le16 SigningAlgorithmCount ;
307
- __le16 SigningAlgorithms [];
308
- /* Followed by padding to 8 byte boundary (required by some servers) */
309
- } __packed ;
310
-
311
- #define POSIX_CTXT_DATA_LEN 16
312
- struct smb2_posix_neg_context {
313
- __le16 ContextType ; /* 0x100 */
314
- __le16 DataLength ;
315
- __le32 Reserved ;
316
- __u8 Name [16 ]; /* POSIX ctxt GUID 93AD25509CB411E7B42383DE968BCD7C */
317
- } __packed ;
318
-
319
- struct smb2_negotiate_rsp {
320
- struct smb2_hdr hdr ;
321
- __le16 StructureSize ; /* Must be 65 */
322
- __le16 SecurityMode ;
323
- __le16 DialectRevision ;
324
- __le16 NegotiateContextCount ; /* Prior to SMB3.1.1 was Reserved & MBZ */
325
- __u8 ServerGUID [16 ];
326
- __le32 Capabilities ;
327
- __le32 MaxTransactSize ;
328
- __le32 MaxReadSize ;
329
- __le32 MaxWriteSize ;
330
- __le64 SystemTime ; /* MBZ */
331
- __le64 ServerStartTime ;
332
- __le16 SecurityBufferOffset ;
333
- __le16 SecurityBufferLength ;
334
- __le32 NegotiateContextOffset ; /* Pre:SMB3.1.1 was reserved/ignored */
335
- __u8 Buffer [1 ]; /* variable length GSS security buffer */
336
- } __packed ;
337
-
338
118
/* Flags */
339
119
#define SMB2_SESSION_REQ_FLAG_BINDING 0x01
340
120
#define SMB2_SESSION_REQ_FLAG_ENCRYPT_DATA 0x04
0 commit comments