Message ID | CAH2r5mtAOxF=PCndMTXxj_dZVLc-NQJfoawOvMeS3FbxiCU6xw@mail.gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Add support for GCM256 encryption | expand |
Hi Steve, Patch 2: > From 3897b440fd14dfc7b2ad2b0a922302ea7705b5d9 Mon Sep 17 00:00:00 2001 > From: Steve French <stfrench@microsoft.com> > Date: Wed, 14 Oct 2020 20:24:09 -0500 > Subject: [PATCH 2/5] smb3.1.1: add new module load parm enable_gcm_256 > --- a/fs/cifs/smb2pdu.h > +++ b/fs/cifs/smb2pdu.h > @@ -361,8 +361,9 @@ struct smb2_encryption_neg_context { > __le16 ContextType; /* 2 */ > __le16 DataLength; > __le32 Reserved; > - __le16 CipherCount; /* AES-128-GCM and AES-128-CCM */ > - __le16 Ciphers[2]; > + /* CipherCount usally 2, but can be 3 when AES256-GCM enabled */ > + __le16 CipherCount; /* AES128-GCM and AES128-CCM by defalt */ Typo defalt => default > + __le16 Ciphers[3]; > } __packed; > > /* See MS-SMB2 2.2.3.1.3 */ > -- > 2.25.1 > Patch 5: > From 314d7476e404c37acb77c3f9ecc142122e7afbfd Mon Sep 17 00:00:00 2001 > From: Steve French <stfrench@microsoft.com> > Date: Fri, 11 Sep 2020 16:47:09 -0500 > Subject: [PATCH 5/5] smb3.1.1: set gcm256 when requested > > update code to set 32 byte key length and to set gcm256 when requested > on mount. > > Signed-off-by: Steve French <stfrench@microsoft.com> > --- > fs/cifs/smb2glob.h | 1 + > fs/cifs/smb2ops.c | 20 ++++++++++++-------- > fs/cifs/smb2transport.c | 16 ++++++++-------- > 3 files changed, 21 insertions(+), 16 deletions(-) > > diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c > index dd1edabec328..d8e74954d101 100644 > --- a/fs/cifs/smb2ops.c > +++ b/fs/cifs/smb2ops.c > @@ -3954,7 +3954,12 @@ crypt_message(struct TCP_Server_Info *server, int num_rqst, > > tfm = enc ? server->secmech.ccmaesencrypt : > server->secmech.ccmaesdecrypt; > - rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > + > + if (require_gcm_256) > + rc = crypto_aead_setkey(tfm, key, SMB3_GCM256_CRYPTKEY_SIZE); Shouldn't the check be on server->cipher_type? > + else > + rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > + > if (rc) { > cifs_server_dbg(VFS, "%s: Failed to set aead key %d\n", __func__, rc); > return rc;
Good point. Updated patches attached. Also added a one line comment to smb2pdu.h mentioning why we don't request AES_256_CCM On Thu, Oct 15, 2020 at 3:49 AM Aurélien Aptel <aaptel@suse.com> wrote: > > Hi Steve, > > Patch 2: > > > From 3897b440fd14dfc7b2ad2b0a922302ea7705b5d9 Mon Sep 17 00:00:00 2001 > > From: Steve French <stfrench@microsoft.com> > > Date: Wed, 14 Oct 2020 20:24:09 -0500 > > Subject: [PATCH 2/5] smb3.1.1: add new module load parm enable_gcm_256 > > --- a/fs/cifs/smb2pdu.h > > +++ b/fs/cifs/smb2pdu.h > > @@ -361,8 +361,9 @@ struct smb2_encryption_neg_context { > > __le16 ContextType; /* 2 */ > > __le16 DataLength; > > __le32 Reserved; > > - __le16 CipherCount; /* AES-128-GCM and AES-128-CCM */ > > - __le16 Ciphers[2]; > > + /* CipherCount usally 2, but can be 3 when AES256-GCM enabled */ > > + __le16 CipherCount; /* AES128-GCM and AES128-CCM by defalt */ > > Typo defalt => default > > > + __le16 Ciphers[3]; > > } __packed; > > > > /* See MS-SMB2 2.2.3.1.3 */ > > -- > > 2.25.1 > > > > Patch 5: > > > From 314d7476e404c37acb77c3f9ecc142122e7afbfd Mon Sep 17 00:00:00 2001 > > From: Steve French <stfrench@microsoft.com> > > Date: Fri, 11 Sep 2020 16:47:09 -0500 > > Subject: [PATCH 5/5] smb3.1.1: set gcm256 when requested > > > > update code to set 32 byte key length and to set gcm256 when requested > > on mount. > > > > Signed-off-by: Steve French <stfrench@microsoft.com> > > --- > > fs/cifs/smb2glob.h | 1 + > > fs/cifs/smb2ops.c | 20 ++++++++++++-------- > > fs/cifs/smb2transport.c | 16 ++++++++-------- > > 3 files changed, 21 insertions(+), 16 deletions(-) > > > > diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c > > index dd1edabec328..d8e74954d101 100644 > > --- a/fs/cifs/smb2ops.c > > +++ b/fs/cifs/smb2ops.c > > @@ -3954,7 +3954,12 @@ crypt_message(struct TCP_Server_Info *server, int num_rqst, > > > > tfm = enc ? server->secmech.ccmaesencrypt : > > server->secmech.ccmaesdecrypt; > > - rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > > + > > + if (require_gcm_256) > > + rc = crypto_aead_setkey(tfm, key, SMB3_GCM256_CRYPTKEY_SIZE); > > Shouldn't the check be on server->cipher_type? > > > + else > > + rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > > + > > if (rc) { > > cifs_server_dbg(VFS, "%s: Failed to set aead key %d\n", __func__, rc); > > return rc; > > -- > Aurélien Aptel / SUSE Labs Samba Team > GPG: 1839 CB5F 9F5B FB9B AA97 8C99 03C8 A49B 521B D5D3 > SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg, DE > GF: Felix Imendörffer, Mary Higgins, Sri Rasiah HRB 247165 (AG München)
found another typo in patch 5 ccm instead of gcm - fixing it now On Thu, Oct 15, 2020 at 11:33 AM Steve French <smfrench@gmail.com> wrote: > > Good point. Updated patches attached. Also added a one line comment > to smb2pdu.h mentioning why we don't request AES_256_CCM > > > On Thu, Oct 15, 2020 at 3:49 AM Aurélien Aptel <aaptel@suse.com> wrote: > > > > Hi Steve, > > > > Patch 2: > > > > > From 3897b440fd14dfc7b2ad2b0a922302ea7705b5d9 Mon Sep 17 00:00:00 2001 > > > From: Steve French <stfrench@microsoft.com> > > > Date: Wed, 14 Oct 2020 20:24:09 -0500 > > > Subject: [PATCH 2/5] smb3.1.1: add new module load parm enable_gcm_256 > > > --- a/fs/cifs/smb2pdu.h > > > +++ b/fs/cifs/smb2pdu.h > > > @@ -361,8 +361,9 @@ struct smb2_encryption_neg_context { > > > __le16 ContextType; /* 2 */ > > > __le16 DataLength; > > > __le32 Reserved; > > > - __le16 CipherCount; /* AES-128-GCM and AES-128-CCM */ > > > - __le16 Ciphers[2]; > > > + /* CipherCount usally 2, but can be 3 when AES256-GCM enabled */ > > > + __le16 CipherCount; /* AES128-GCM and AES128-CCM by defalt */ > > > > Typo defalt => default > > > > > + __le16 Ciphers[3]; > > > } __packed; > > > > > > /* See MS-SMB2 2.2.3.1.3 */ > > > -- > > > 2.25.1 > > > > > > > Patch 5: > > > > > From 314d7476e404c37acb77c3f9ecc142122e7afbfd Mon Sep 17 00:00:00 2001 > > > From: Steve French <stfrench@microsoft.com> > > > Date: Fri, 11 Sep 2020 16:47:09 -0500 > > > Subject: [PATCH 5/5] smb3.1.1: set gcm256 when requested > > > > > > update code to set 32 byte key length and to set gcm256 when requested > > > on mount. > > > > > > Signed-off-by: Steve French <stfrench@microsoft.com> > > > --- > > > fs/cifs/smb2glob.h | 1 + > > > fs/cifs/smb2ops.c | 20 ++++++++++++-------- > > > fs/cifs/smb2transport.c | 16 ++++++++-------- > > > 3 files changed, 21 insertions(+), 16 deletions(-) > > > > > > diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c > > > index dd1edabec328..d8e74954d101 100644 > > > --- a/fs/cifs/smb2ops.c > > > +++ b/fs/cifs/smb2ops.c > > > @@ -3954,7 +3954,12 @@ crypt_message(struct TCP_Server_Info *server, int num_rqst, > > > > > > tfm = enc ? server->secmech.ccmaesencrypt : > > > server->secmech.ccmaesdecrypt; > > > - rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > > > + > > > + if (require_gcm_256) > > > + rc = crypto_aead_setkey(tfm, key, SMB3_GCM256_CRYPTKEY_SIZE); > > > > Shouldn't the check be on server->cipher_type? > > > > > + else > > > + rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > > > + > > > if (rc) { > > > cifs_server_dbg(VFS, "%s: Failed to set aead key %d\n", __func__, rc); > > > return rc; > > > > -- > > Aurélien Aptel / SUSE Labs Samba Team > > GPG: 1839 CB5F 9F5B FB9B AA97 8C99 03C8 A49B 521B D5D3 > > SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg, DE > > GF: Felix Imendörffer, Mary Higgins, Sri Rasiah HRB 247165 (AG München) > > > > -- > Thanks, > > Steve
Redid patch 5 (includes Aurelien's suggestion, fixes a typo and fixes a problem with vers=3.0 mounts) - attached. On Thu, Oct 15, 2020 at 12:41 PM Steve French <smfrench@gmail.com> wrote: > > found another typo in patch 5 ccm instead of gcm - fixing it now > > On Thu, Oct 15, 2020 at 11:33 AM Steve French <smfrench@gmail.com> wrote: > > > > Good point. Updated patches attached. Also added a one line comment > > to smb2pdu.h mentioning why we don't request AES_256_CCM > > > > > > On Thu, Oct 15, 2020 at 3:49 AM Aurélien Aptel <aaptel@suse.com> wrote: > > > > > > Hi Steve, > > > > > > Patch 2: > > > > > > > From 3897b440fd14dfc7b2ad2b0a922302ea7705b5d9 Mon Sep 17 00:00:00 2001 > > > > From: Steve French <stfrench@microsoft.com> > > > > Date: Wed, 14 Oct 2020 20:24:09 -0500 > > > > Subject: [PATCH 2/5] smb3.1.1: add new module load parm enable_gcm_256 > > > > --- a/fs/cifs/smb2pdu.h > > > > +++ b/fs/cifs/smb2pdu.h > > > > @@ -361,8 +361,9 @@ struct smb2_encryption_neg_context { > > > > __le16 ContextType; /* 2 */ > > > > __le16 DataLength; > > > > __le32 Reserved; > > > > - __le16 CipherCount; /* AES-128-GCM and AES-128-CCM */ > > > > - __le16 Ciphers[2]; > > > > + /* CipherCount usally 2, but can be 3 when AES256-GCM enabled */ > > > > + __le16 CipherCount; /* AES128-GCM and AES128-CCM by defalt */ > > > > > > Typo defalt => default > > > > > > > + __le16 Ciphers[3]; > > > > } __packed; > > > > > > > > /* See MS-SMB2 2.2.3.1.3 */ > > > > -- > > > > 2.25.1 > > > > > > > > > > Patch 5: > > > > > > > From 314d7476e404c37acb77c3f9ecc142122e7afbfd Mon Sep 17 00:00:00 2001 > > > > From: Steve French <stfrench@microsoft.com> > > > > Date: Fri, 11 Sep 2020 16:47:09 -0500 > > > > Subject: [PATCH 5/5] smb3.1.1: set gcm256 when requested > > > > > > > > update code to set 32 byte key length and to set gcm256 when requested > > > > on mount. > > > > > > > > Signed-off-by: Steve French <stfrench@microsoft.com> > > > > --- > > > > fs/cifs/smb2glob.h | 1 + > > > > fs/cifs/smb2ops.c | 20 ++++++++++++-------- > > > > fs/cifs/smb2transport.c | 16 ++++++++-------- > > > > 3 files changed, 21 insertions(+), 16 deletions(-) > > > > > > > > diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c > > > > index dd1edabec328..d8e74954d101 100644 > > > > --- a/fs/cifs/smb2ops.c > > > > +++ b/fs/cifs/smb2ops.c > > > > @@ -3954,7 +3954,12 @@ crypt_message(struct TCP_Server_Info *server, int num_rqst, > > > > > > > > tfm = enc ? server->secmech.ccmaesencrypt : > > > > server->secmech.ccmaesdecrypt; > > > > - rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > > > > + > > > > + if (require_gcm_256) > > > > + rc = crypto_aead_setkey(tfm, key, SMB3_GCM256_CRYPTKEY_SIZE); > > > > > > Shouldn't the check be on server->cipher_type? > > > > > > > + else > > > > + rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > > > > + > > > > if (rc) { > > > > cifs_server_dbg(VFS, "%s: Failed to set aead key %d\n", __func__, rc); > > > > return rc; > > > > > > -- > > > Aurélien Aptel / SUSE Labs Samba Team > > > GPG: 1839 CB5F 9F5B FB9B AA97 8C99 03C8 A49B 521B D5D3 > > > SUSE Software Solutions Germany GmbH, Maxfeldstr. 5, 90409 Nürnberg, DE > > > GF: Felix Imendörffer, Mary Higgins, Sri Rasiah HRB 247165 (AG München) > > > > > > > > -- > > Thanks, > > > > Steve > > > > -- > Thanks, > > Steve
Am 16.10.20 um 06:45 schrieb Steve French: > Redid patch 5 (includes Aurelien's suggestion, fixes a typo and fixes > a problem with vers=3.0 mounts) - attached. > > On Thu, Oct 15, 2020 at 12:41 PM Steve French <smfrench@gmail.com> wrote: >> >> found another typo in patch 5 ccm instead of gcm - fixing it now >> >> On Thu, Oct 15, 2020 at 11:33 AM Steve French <smfrench@gmail.com> wrote: >>> >>> Good point. Updated patches attached. Also added a one line comment >>> to smb2pdu.h mentioning why we don't request AES_256_CCM >>> >>> >>> On Thu, Oct 15, 2020 at 3:49 AM Aurélien Aptel <aaptel@suse.com> wrote: >>>> >>>> Hi Steve, >>>> >>>> Patch 2: >>>> >>>>> From 3897b440fd14dfc7b2ad2b0a922302ea7705b5d9 Mon Sep 17 00:00:00 2001 >>>>> From: Steve French <stfrench@microsoft.com> >>>>> Date: Wed, 14 Oct 2020 20:24:09 -0500 >>>>> Subject: [PATCH 2/5] smb3.1.1: add new module load parm enable_gcm_256 >>>>> --- a/fs/cifs/smb2pdu.h >>>>> +++ b/fs/cifs/smb2pdu.h >>>>> @@ -361,8 +361,9 @@ struct smb2_encryption_neg_context { >>>>> __le16 ContextType; /* 2 */ >>>>> __le16 DataLength; >>>>> __le32 Reserved; >>>>> - __le16 CipherCount; /* AES-128-GCM and AES-128-CCM */ >>>>> - __le16 Ciphers[2]; >>>>> + /* CipherCount usally 2, but can be 3 when AES256-GCM enabled */ >>>>> + __le16 CipherCount; /* AES128-GCM and AES128-CCM by defalt */ >>>> >>>> Typo defalt => default >>>> >>>>> + __le16 Ciphers[3]; >>>>> } __packed; >>>>> >>>>> /* See MS-SMB2 2.2.3.1.3 */ >>>>> -- >>>>> 2.25.1 >>>>> >>>> >>>> Patch 5: >>>> >>>>> From 314d7476e404c37acb77c3f9ecc142122e7afbfd Mon Sep 17 00:00:00 2001 >>>>> From: Steve French <stfrench@microsoft.com> >>>>> Date: Fri, 11 Sep 2020 16:47:09 -0500 >>>>> Subject: [PATCH 5/5] smb3.1.1: set gcm256 when requested >>>>> >>>>> update code to set 32 byte key length and to set gcm256 when requested >>>>> on mount. >>>>> >>>>> Signed-off-by: Steve French <stfrench@microsoft.com> >>>>> --- >>>>> fs/cifs/smb2glob.h | 1 + >>>>> fs/cifs/smb2ops.c | 20 ++++++++++++-------- >>>>> fs/cifs/smb2transport.c | 16 ++++++++-------- >>>>> 3 files changed, 21 insertions(+), 16 deletions(-) >>>>> >>>>> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c >>>>> index dd1edabec328..d8e74954d101 100644 >>>>> --- a/fs/cifs/smb2ops.c >>>>> +++ b/fs/cifs/smb2ops.c >>>>> @@ -3954,7 +3954,12 @@ crypt_message(struct TCP_Server_Info *server, int num_rqst, >>>>> >>>>> tfm = enc ? server->secmech.ccmaesencrypt : >>>>> server->secmech.ccmaesdecrypt; >>>>> - rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); >>>>> + >>>>> + if (require_gcm_256) >>>>> + rc = crypto_aead_setkey(tfm, key, SMB3_GCM256_CRYPTKEY_SIZE); >>>> >>>> Shouldn't the check be on server->cipher_type? >>>> >>>>> + else >>>>> + rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); >>>>> + You still just use u8 key[SMB3_SIGN_KEY_SIZE]; Shouldn't smb2_get_enc_key() get the buffer size and return the size actually used? I also don't see where you setup the 32 byte encryption/decryption keys from the authentication session key? [MS-SMB2] 3.3.5.5.3 Handling GSS-API Authentication point 11.) specifies that the full authentication session key should be used as key derivation key for AES256 (NTLMSSP always returns 16 bytes, kerberos can return 16 or 32 bytes). 3.3.1.8 Per Session says the resulting keys should be 256-bit (32 bytes) for AES-256. I don't see any of this in your patchset. Did you actually tested this successful against a Windows Server? Can you use 'git format-patch --stdout > patches.txt' and attach patches.txt as inline text attachment? Or use git send-email ... Individual randomly sorted non text/plain attachments are very hard to comment on (at least for me). metze
The patch series is missing the final piece (the small change to encryption related parms), because I was waiting to test that part with Pavel. I did verify the negotiation works fine to the newest Windows download mentioned earlier but also wanted to try it to Azure and expect the final change needed to be small. I had also been trying to focus on the larger changes needed during the merge window and finish the final piece off next week of this one. On Thu, Oct 22, 2020 at 7:59 AM Stefan Metzmacher <metze@samba.org> wrote: > > Am 16.10.20 um 06:45 schrieb Steve French: > > Redid patch 5 (includes Aurelien's suggestion, fixes a typo and fixes > > a problem with vers=3.0 mounts) - attached. > > > > On Thu, Oct 15, 2020 at 12:41 PM Steve French <smfrench@gmail.com> wrote: > >> > >> found another typo in patch 5 ccm instead of gcm - fixing it now > >> > >> On Thu, Oct 15, 2020 at 11:33 AM Steve French <smfrench@gmail.com> wrote: > >>> > >>> Good point. Updated patches attached. Also added a one line comment > >>> to smb2pdu.h mentioning why we don't request AES_256_CCM > >>> > >>> > >>> On Thu, Oct 15, 2020 at 3:49 AM Aurélien Aptel <aaptel@suse.com> wrote: > >>>> > >>>> Hi Steve, > >>>> > >>>> Patch 2: > >>>> > >>>>> From 3897b440fd14dfc7b2ad2b0a922302ea7705b5d9 Mon Sep 17 00:00:00 2001 > >>>>> From: Steve French <stfrench@microsoft.com> > >>>>> Date: Wed, 14 Oct 2020 20:24:09 -0500 > >>>>> Subject: [PATCH 2/5] smb3.1.1: add new module load parm enable_gcm_256 > >>>>> --- a/fs/cifs/smb2pdu.h > >>>>> +++ b/fs/cifs/smb2pdu.h > >>>>> @@ -361,8 +361,9 @@ struct smb2_encryption_neg_context { > >>>>> __le16 ContextType; /* 2 */ > >>>>> __le16 DataLength; > >>>>> __le32 Reserved; > >>>>> - __le16 CipherCount; /* AES-128-GCM and AES-128-CCM */ > >>>>> - __le16 Ciphers[2]; > >>>>> + /* CipherCount usally 2, but can be 3 when AES256-GCM enabled */ > >>>>> + __le16 CipherCount; /* AES128-GCM and AES128-CCM by defalt */ > >>>> > >>>> Typo defalt => default > >>>> > >>>>> + __le16 Ciphers[3]; > >>>>> } __packed; > >>>>> > >>>>> /* See MS-SMB2 2.2.3.1.3 */ > >>>>> -- > >>>>> 2.25.1 > >>>>> > >>>> > >>>> Patch 5: > >>>> > >>>>> From 314d7476e404c37acb77c3f9ecc142122e7afbfd Mon Sep 17 00:00:00 2001 > >>>>> From: Steve French <stfrench@microsoft.com> > >>>>> Date: Fri, 11 Sep 2020 16:47:09 -0500 > >>>>> Subject: [PATCH 5/5] smb3.1.1: set gcm256 when requested > >>>>> > >>>>> update code to set 32 byte key length and to set gcm256 when requested > >>>>> on mount. > >>>>> > >>>>> Signed-off-by: Steve French <stfrench@microsoft.com> > >>>>> --- > >>>>> fs/cifs/smb2glob.h | 1 + > >>>>> fs/cifs/smb2ops.c | 20 ++++++++++++-------- > >>>>> fs/cifs/smb2transport.c | 16 ++++++++-------- > >>>>> 3 files changed, 21 insertions(+), 16 deletions(-) > >>>>> > >>>>> diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c > >>>>> index dd1edabec328..d8e74954d101 100644 > >>>>> --- a/fs/cifs/smb2ops.c > >>>>> +++ b/fs/cifs/smb2ops.c > >>>>> @@ -3954,7 +3954,12 @@ crypt_message(struct TCP_Server_Info *server, int num_rqst, > >>>>> > >>>>> tfm = enc ? server->secmech.ccmaesencrypt : > >>>>> server->secmech.ccmaesdecrypt; > >>>>> - rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > >>>>> + > >>>>> + if (require_gcm_256) > >>>>> + rc = crypto_aead_setkey(tfm, key, SMB3_GCM256_CRYPTKEY_SIZE); > >>>> > >>>> Shouldn't the check be on server->cipher_type? > >>>> > >>>>> + else > >>>>> + rc = crypto_aead_setkey(tfm, key, SMB3_SIGN_KEY_SIZE); > >>>>> + > > You still just use u8 key[SMB3_SIGN_KEY_SIZE]; > > Shouldn't smb2_get_enc_key() get the buffer size and return the size actually used? > > I also don't see where you setup the 32 byte encryption/decryption keys from > the authentication session key? > > [MS-SMB2] 3.3.5.5.3 Handling GSS-API Authentication point 11.) > specifies that the full authentication session key should be used as key derivation key > for AES256 (NTLMSSP always returns 16 bytes, kerberos can return 16 or 32 bytes). > 3.3.1.8 Per Session says the resulting keys should be 256-bit (32 bytes) for AES-256. > > I don't see any of this in your patchset. > > Did you actually tested this successful against a Windows Server? > > Can you use 'git format-patch --stdout > patches.txt' and attach patches.txt > as inline text attachment? Or use git send-email ... > Individual randomly sorted non text/plain attachments are very hard to comment on > (at least for me). > > metze > -- Thanks, Steve
From 671d6f325f958b6123ee467a3e00fa134cf9195f Mon Sep 17 00:00:00 2001 From: Steve French <stfrench@microsoft.com> Date: Fri, 11 Sep 2020 16:19:28 -0500 Subject: [PATCH 1/5] smb3.1.1: add new module load parm require_gcm_256 Add new module load parameter require_gcm_256. If set, then only request AES-256-GCM (strongest encryption type). Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com> Signed-off-by: Steve French <stfrench@microsoft.com> --- fs/cifs/cifsfs.c | 4 ++++ fs/cifs/cifsglob.h | 1 + fs/cifs/smb2pdu.c | 14 ++++++++++---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 0fb99d25e8a8..462dbbd17c5f 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -71,6 +71,7 @@ bool enable_oplocks = true; bool linuxExtEnabled = true; bool lookupCacheEnabled = true; bool disable_legacy_dialects; /* false by default */ +bool require_gcm_256; /* false by default */ unsigned int global_secflags = CIFSSEC_DEF; /* unsigned int ntlmv2_support = 0; */ unsigned int sign_CIFS_PDUs = 1; @@ -104,6 +105,9 @@ MODULE_PARM_DESC(slow_rsp_threshold, "Amount of time (in seconds) to wait " module_param(enable_oplocks, bool, 0644); MODULE_PARM_DESC(enable_oplocks, "Enable or disable oplocks. Default: y/Y/1"); +module_param(require_gcm_256, bool, 0644); +MODULE_PARM_DESC(require_gcm_256, "Require strongest (256 bit) GCM encryption. Default: n/N/0"); + module_param(disable_legacy_dialects, bool, 0644); MODULE_PARM_DESC(disable_legacy_dialects, "To improve security it may be " "helpful to restrict the ability to " diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 5a491afafacc..ec21af833749 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h @@ -1956,6 +1956,7 @@ extern bool lookupCacheEnabled; extern unsigned int global_secflags; /* if on, session setup sent with more secure ntlmssp2 challenge/resp */ extern unsigned int sign_CIFS_PDUs; /* enable smb packet signing */ +extern bool require_gcm_256; /* require use of strongest signing (aes-gcm-256) */ extern bool linuxExtEnabled;/*enable Linux/Unix CIFS extensions*/ extern unsigned int CIFSMaxBufSize; /* max size not including hdr */ extern unsigned int cifs_min_rcv; /* min size of big ntwrk buf pool */ diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c index 96c172d94fba..fcae1e3dfcc5 100644 --- a/fs/cifs/smb2pdu.c +++ b/fs/cifs/smb2pdu.c @@ -449,10 +449,16 @@ static void build_encrypt_ctxt(struct smb2_encryption_neg_context *pneg_ctxt) { pneg_ctxt->ContextType = SMB2_ENCRYPTION_CAPABILITIES; - pneg_ctxt->DataLength = cpu_to_le16(6); /* Cipher Count + two ciphers */ - pneg_ctxt->CipherCount = cpu_to_le16(2); - pneg_ctxt->Ciphers[0] = SMB2_ENCRYPTION_AES128_GCM; - pneg_ctxt->Ciphers[1] = SMB2_ENCRYPTION_AES128_CCM; + if (require_gcm_256) { + pneg_ctxt->DataLength = cpu_to_le16(4); /* Cipher Count + 1 cipher */ + pneg_ctxt->CipherCount = cpu_to_le16(1); + pneg_ctxt->Ciphers[0] = SMB2_ENCRYPTION_AES256_GCM; + } else { + pneg_ctxt->DataLength = cpu_to_le16(6); /* Cipher Count + 2 ciphers */ + pneg_ctxt->CipherCount = cpu_to_le16(2); + pneg_ctxt->Ciphers[0] = SMB2_ENCRYPTION_AES128_GCM; + pneg_ctxt->Ciphers[1] = SMB2_ENCRYPTION_AES128_CCM; + } } static unsigned int -- 2.25.1