]> git.baikalelectronics.ru Git - kernel.git/commitdiff
ksmbd: use the common definitions for NEGOTIATE_PROTOCOL
authorRonnie Sahlberg <lsahlber@redhat.com>
Tue, 2 Nov 2021 23:44:38 +0000 (08:44 +0900)
committerSteve French <stfrench@microsoft.com>
Fri, 12 Nov 2021 01:22:58 +0000 (19:22 -0600)
Acked-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Ronnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/ksmbd/smb2ops.c
fs/ksmbd/smb2pdu.c
fs/ksmbd/smb2pdu.h
fs/ksmbd/smb_common.h

index 5a2dc12249acf7cfbe8c2a719188516f0265f162..0a5d8450e835fa4a804d7f05ab78ce46f41df9f0 100644 (file)
@@ -198,7 +198,7 @@ void init_smb2_1_server(struct ksmbd_conn *conn)
        conn->cmds = smb2_0_server_cmds;
        conn->max_cmds = ARRAY_SIZE(smb2_0_server_cmds);
        conn->max_credits = SMB2_MAX_CREDITS;
-       conn->signing_algorithm = SIGNING_ALG_HMAC_SHA256;
+       conn->signing_algorithm = SIGNING_ALG_HMAC_SHA256_LE;
 
        if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
                conn->vals->capabilities |= SMB2_GLOBAL_CAP_LEASING;
@@ -216,7 +216,7 @@ void init_smb3_0_server(struct ksmbd_conn *conn)
        conn->cmds = smb2_0_server_cmds;
        conn->max_cmds = ARRAY_SIZE(smb2_0_server_cmds);
        conn->max_credits = SMB2_MAX_CREDITS;
-       conn->signing_algorithm = SIGNING_ALG_AES_CMAC;
+       conn->signing_algorithm = SIGNING_ALG_AES_CMAC_LE;
 
        if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
                conn->vals->capabilities |= SMB2_GLOBAL_CAP_LEASING;
@@ -241,7 +241,7 @@ void init_smb3_02_server(struct ksmbd_conn *conn)
        conn->cmds = smb2_0_server_cmds;
        conn->max_cmds = ARRAY_SIZE(smb2_0_server_cmds);
        conn->max_credits = SMB2_MAX_CREDITS;
-       conn->signing_algorithm = SIGNING_ALG_AES_CMAC;
+       conn->signing_algorithm = SIGNING_ALG_AES_CMAC_LE;
 
        if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
                conn->vals->capabilities |= SMB2_GLOBAL_CAP_LEASING;
@@ -266,7 +266,7 @@ int init_smb3_11_server(struct ksmbd_conn *conn)
        conn->cmds = smb2_0_server_cmds;
        conn->max_cmds = ARRAY_SIZE(smb2_0_server_cmds);
        conn->max_credits = SMB2_MAX_CREDITS;
-       conn->signing_algorithm = SIGNING_ALG_AES_CMAC;
+       conn->signing_algorithm = SIGNING_ALG_AES_CMAC_LE;
 
        if (server_conf.flags & KSMBD_GLOBAL_FLAG_SMB2_LEASES)
                conn->vals->capabilities |= SMB2_GLOBAL_CAP_LEASING;
index ad8ddeb5156d163c613d2786a9b28078ef76e3a8..00fba29683390aefe2e0526b982d14e8d1dac79f 100644 (file)
@@ -751,16 +751,16 @@ static void build_encrypt_ctxt(struct smb2_encryption_neg_context *pneg_ctxt,
        pneg_ctxt->Ciphers[0] = cipher_type;
 }
 
-static void build_compression_ctxt(struct smb2_compression_ctx *pneg_ctxt,
+static void build_compression_ctxt(struct smb2_compression_capabilities_context *pneg_ctxt,
                                   __le16 comp_algo)
 {
        pneg_ctxt->ContextType = SMB2_COMPRESSION_CAPABILITIES;
        pneg_ctxt->DataLength =
-               cpu_to_le16(sizeof(struct smb2_compression_ctx)
+               cpu_to_le16(sizeof(struct smb2_compression_capabilities_context)
                        - sizeof(struct smb2_neg_context));
        pneg_ctxt->Reserved = cpu_to_le32(0);
        pneg_ctxt->CompressionAlgorithmCount = cpu_to_le16(1);
-       pneg_ctxt->Reserved1 = cpu_to_le32(0);
+       pneg_ctxt->Flags = cpu_to_le32(0);
        pneg_ctxt->CompressionAlgorithms[0] = comp_algo;
 }
 
@@ -837,12 +837,12 @@ static void assemble_neg_contexts(struct ksmbd_conn *conn,
                ksmbd_debug(SMB,
                            "assemble SMB2_COMPRESSION_CAPABILITIES context\n");
                /* Temporarily set to SMB3_COMPRESS_NONE */
-               build_compression_ctxt((struct smb2_compression_ctx *)pneg_ctxt,
+               build_compression_ctxt((struct smb2_compression_capabilities_context *)pneg_ctxt,
                                       conn->compress_algorithm);
                rsp->NegotiateContextCount = cpu_to_le16(++neg_ctxt_cnt);
-               ctxt_size += sizeof(struct smb2_compression_ctx) + 2;
+               ctxt_size += sizeof(struct smb2_compression_capabilities_context) + 2;
                /* Round to 8 byte boundary */
-               pneg_ctxt += round_up(sizeof(struct smb2_compression_ctx) + 2,
+               pneg_ctxt += round_up(sizeof(struct smb2_compression_capabilities_context) + 2,
                                      8);
        }
 
@@ -916,7 +916,7 @@ static void decode_encrypt_ctxt(struct ksmbd_conn *conn,
 }
 
 static void decode_compress_ctxt(struct ksmbd_conn *conn,
-                                struct smb2_compression_ctx *pneg_ctxt)
+                                struct smb2_compression_capabilities_context *pneg_ctxt)
 {
        conn->compress_algorithm = SMB3_COMPRESS_NONE;
 }
@@ -937,8 +937,8 @@ static void decode_sign_cap_ctxt(struct ksmbd_conn *conn,
        }
 
        for (i = 0; i < sign_algo_cnt; i++) {
-               if (pneg_ctxt->SigningAlgorithms[i] == SIGNING_ALG_HMAC_SHA256 ||
-                   pneg_ctxt->SigningAlgorithms[i] == SIGNING_ALG_AES_CMAC) {
+               if (pneg_ctxt->SigningAlgorithms[i] == SIGNING_ALG_HMAC_SHA256_LE ||
+                   pneg_ctxt->SigningAlgorithms[i] == SIGNING_ALG_AES_CMAC_LE) {
                        ksmbd_debug(SMB, "Signing Algorithm ID = 0x%x\n",
                                    pneg_ctxt->SigningAlgorithms[i]);
                        conn->signing_negotiated = true;
@@ -1009,7 +1009,7 @@ static __le32 deassemble_neg_contexts(struct ksmbd_conn *conn,
                                break;
 
                        decode_compress_ctxt(conn,
-                                            (struct smb2_compression_ctx *)pctx);
+                                            (struct smb2_compression_capabilities_context *)pctx);
                } else if (pctx->ContextType == SMB2_NETNAME_NEGOTIATE_CONTEXT_ID) {
                        ksmbd_debug(SMB,
                                    "deassemble SMB2_NETNAME_NEGOTIATE_CONTEXT_ID context\n");
index 15437d0c1aaf9eb5b214a9332281140e6b55859f..c7aab0a68de0f4289e9b1353b60bb6710596cd6b 100644 (file)
@@ -42,9 +42,6 @@
 /* SMB2 Max Credits */
 #define SMB2_MAX_CREDITS               8192
 
-#define SMB2_CLIENT_GUID_SIZE          16
-#define SMB2_CREATE_GUID_SIZE          16
-
 /* Maximum buffer size value we can send with 1 credit */
 #define SMB2_MAX_BUFFER_SIZE 65536
 
@@ -80,48 +77,11 @@ struct smb2_err_rsp {
        __u8   ErrorData[1];  /* variable length */
 } __packed;
 
-struct smb2_negotiate_req {
-       struct smb2_hdr hdr;
-       __le16 StructureSize; /* Must be 36 */
-       __le16 DialectCount;
-       __le16 SecurityMode;
-       __le16 Reserved;        /* MBZ */
-       __le32 Capabilities;
-       __u8   ClientGUID[SMB2_CLIENT_GUID_SIZE];
-       /* In SMB3.02 and earlier next three were MBZ le64 ClientStartTime */
-       __le32 NegotiateContextOffset; /* SMB3.1.1 only. MBZ earlier */
-       __le16 NegotiateContextCount;  /* SMB3.1.1 only. MBZ earlier */
-       __le16 Reserved2;
-       __le16 Dialects[1]; /* One dialect (vers=) at a time for now */
-} __packed;
-
-/* SecurityMode flags */
-#define SMB2_NEGOTIATE_SIGNING_ENABLED_LE      cpu_to_le16(0x0001)
-#define SMB2_NEGOTIATE_SIGNING_REQUIRED                0x0002
-#define SMB2_NEGOTIATE_SIGNING_REQUIRED_LE     cpu_to_le16(0x0002)
-/* Capabilities flags */
-#define SMB2_GLOBAL_CAP_DFS            0x00000001
-#define SMB2_GLOBAL_CAP_LEASING                0x00000002 /* Resp only New to SMB2.1 */
-#define SMB2_GLOBAL_CAP_LARGE_MTU      0X00000004 /* Resp only New to SMB2.1 */
-#define SMB2_GLOBAL_CAP_MULTI_CHANNEL  0x00000008 /* New to SMB3 */
-#define SMB2_GLOBAL_CAP_PERSISTENT_HANDLES 0x00000010 /* New to SMB3 */
-#define SMB2_GLOBAL_CAP_DIRECTORY_LEASING  0x00000020 /* New to SMB3 */
-#define SMB2_GLOBAL_CAP_ENCRYPTION     0x00000040 /* New to SMB3 */
-/* Internal types */
-#define SMB2_NT_FIND                   0x00100000
-#define SMB2_LARGE_FILES               0x00200000
-
-#define SMB311_SALT_SIZE                       32
-/* Hash Algorithm Types */
-#define SMB2_PREAUTH_INTEGRITY_SHA512  cpu_to_le16(0x0001)
-
-#define PREAUTH_HASHVALUE_SIZE         64
-
 struct preauth_integrity_info {
        /* PreAuth integrity Hash ID */
        __le16                  Preauth_HashId;
        /* PreAuth integrity Hash Value */
-       __u8                    Preauth_HashValue[PREAUTH_HASHVALUE_SIZE];
+       __u8                    Preauth_HashValue[SMB2_PREAUTH_HASH_SIZE];
 };
 
 /* offset is sizeof smb2_negotiate_rsp but rounded up to 8 bytes. */
@@ -137,107 +97,6 @@ struct preauth_integrity_info {
 #define OFFSET_OF_NEG_CONTEXT  0xd0
 #endif
 
-#define SMB2_PREAUTH_INTEGRITY_CAPABILITIES    cpu_to_le16(1)
-#define SMB2_ENCRYPTION_CAPABILITIES           cpu_to_le16(2)
-#define SMB2_COMPRESSION_CAPABILITIES          cpu_to_le16(3)
-#define SMB2_NETNAME_NEGOTIATE_CONTEXT_ID      cpu_to_le16(5)
-#define SMB2_SIGNING_CAPABILITIES              cpu_to_le16(8)
-#define SMB2_POSIX_EXTENSIONS_AVAILABLE                cpu_to_le16(0x100)
-
-struct smb2_neg_context {
-       __le16  ContextType;
-       __le16  DataLength;
-       __le32  Reserved;
-       /* Followed by array of data */
-} __packed;
-
-struct smb2_preauth_neg_context {
-       __le16  ContextType; /* 1 */
-       __le16  DataLength;
-       __le32  Reserved;
-       __le16  HashAlgorithmCount; /* 1 */
-       __le16  SaltLength;
-       __le16  HashAlgorithms; /* HashAlgorithms[0] since only one defined */
-       __u8    Salt[SMB311_SALT_SIZE];
-} __packed;
-
-/* Encryption Algorithms Ciphers */
-#define SMB2_ENCRYPTION_AES128_CCM     cpu_to_le16(0x0001)
-#define SMB2_ENCRYPTION_AES128_GCM     cpu_to_le16(0x0002)
-#define SMB2_ENCRYPTION_AES256_CCM     cpu_to_le16(0x0003)
-#define SMB2_ENCRYPTION_AES256_GCM     cpu_to_le16(0x0004)
-
-struct smb2_encryption_neg_context {
-       __le16  ContextType; /* 2 */
-       __le16  DataLength;
-       __le32  Reserved;
-       /* CipherCount usally 2, but can be 3 when AES256-GCM enabled */
-       __le16  CipherCount; /* AES-128-GCM and AES-128-CCM by default */
-       __le16  Ciphers[];
-} __packed;
-
-#define SMB3_COMPRESS_NONE     cpu_to_le16(0x0000)
-#define SMB3_COMPRESS_LZNT1    cpu_to_le16(0x0001)
-#define SMB3_COMPRESS_LZ77     cpu_to_le16(0x0002)
-#define SMB3_COMPRESS_LZ77_HUFF        cpu_to_le16(0x0003)
-
-struct smb2_compression_ctx {
-       __le16  ContextType; /* 3 */
-       __le16  DataLength;
-       __le32  Reserved;
-       __le16  CompressionAlgorithmCount;
-       __u16   Padding;
-       __le32  Reserved1;
-       __le16  CompressionAlgorithms[];
-} __packed;
-
-#define POSIX_CTXT_DATA_LEN     16
-struct smb2_posix_neg_context {
-       __le16  ContextType; /* 0x100 */
-       __le16  DataLength;
-       __le32  Reserved;
-       __u8    Name[16]; /* POSIX ctxt GUID 93AD25509CB411E7B42383DE968BCD7C */
-} __packed;
-
-struct smb2_netname_neg_context {
-       __le16  ContextType; /* 0x100 */
-       __le16  DataLength;
-       __le32  Reserved;
-       __le16  NetName[]; /* hostname of target converted to UCS-2 */
-} __packed;
-
-/* Signing algorithms */
-#define SIGNING_ALG_HMAC_SHA256                cpu_to_le16(0)
-#define SIGNING_ALG_AES_CMAC           cpu_to_le16(1)
-#define SIGNING_ALG_AES_GMAC           cpu_to_le16(2)
-
-struct smb2_signing_capabilities {
-       __le16  ContextType; /* 8 */
-       __le16  DataLength;
-       __le32  Reserved;
-       __le16  SigningAlgorithmCount;
-       __le16  SigningAlgorithms[];
-} __packed;
-
-struct smb2_negotiate_rsp {
-       struct smb2_hdr hdr;
-       __le16 StructureSize;   /* Must be 65 */
-       __le16 SecurityMode;
-       __le16 DialectRevision;
-       __le16 NegotiateContextCount; /* Prior to SMB3.1.1 was Reserved & MBZ */
-       __u8   ServerGUID[16];
-       __le32 Capabilities;
-       __le32 MaxTransactSize;
-       __le32 MaxReadSize;
-       __le32 MaxWriteSize;
-       __le64 SystemTime;      /* MBZ */
-       __le64 ServerStartTime;
-       __le16 SecurityBufferOffset;
-       __le16 SecurityBufferLength;
-       __le32 NegotiateContextOffset;  /* Pre:SMB3.1.1 was reserved/ignored */
-       __u8   Buffer[1];       /* variable length GSS security buffer */
-} __packed;
-
 /* Flags */
 #define SMB2_SESSION_REQ_FLAG_BINDING          0x01
 #define SMB2_SESSION_REQ_FLAG_ENCRYPT_DATA     0x04
index e7d698154699a132d71b2fccb4167bd682367cf1..8ed09ba782c295bc8e0e27a2ba94dc1c3cfb624e 100644 (file)
 #define SMB302_VERSION_STRING  "3.02"
 #define SMB311_VERSION_STRING  "3.1.1"
 
-/* Dialects */
-#define SMB10_PROT_ID          0x00
-#define SMB20_PROT_ID          0x0202
-#define SMB21_PROT_ID          0x0210
-/* multi-protocol negotiate request */
-#define SMB2X_PROT_ID          0x02FF
-#define SMB30_PROT_ID          0x0300
-#define SMB302_PROT_ID         0x0302
-#define SMB311_PROT_ID         0x0311
-#define BAD_PROT_ID            0xFFFF
-
 #define SMB_ECHO_INTERVAL      (60 * HZ)
 
 #define CIFS_DEFAULT_IOSIZE    (64 * 1024)