cifs: fix SMB2 signing enablement in cifs_enable_signing
Commit 9ddec56131
(cifs: move handling of signed connections into
separate function) broke signing on SMB2/3 connections. While the code
to enable signing on the connections was very similar between the two,
the bits that get set in the sec_mode are different.
Declare a couple of new smb_version_values fields and set them
appropriately for SMB1 and SMB2/3. Then change cifs_enable_signing to
use those instead.
Reported-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
Signed-off-by: Jeff Layton <jlayton@redhat.com>
Tested-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
Signed-off-by: Steve French <smfrench@gmail.com>
This commit is contained in:
parent
e65a5cb417
commit
50285882fd
|
@ -387,6 +387,8 @@ struct smb_version_values {
|
||||||
unsigned int cap_nt_find;
|
unsigned int cap_nt_find;
|
||||||
unsigned int cap_large_files;
|
unsigned int cap_large_files;
|
||||||
unsigned int oplock_read;
|
unsigned int oplock_read;
|
||||||
|
__u16 signing_enabled;
|
||||||
|
__u16 signing_required;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define HEADER_SIZE(server) (server->vals->header_size)
|
#define HEADER_SIZE(server) (server->vals->header_size)
|
||||||
|
|
|
@ -407,8 +407,8 @@ decode_ext_sec_blob(struct cifs_ses *ses, NEGOTIATE_RSP *pSMBr)
|
||||||
int
|
int
|
||||||
cifs_enable_signing(struct TCP_Server_Info *server, bool mnt_sign_required)
|
cifs_enable_signing(struct TCP_Server_Info *server, bool mnt_sign_required)
|
||||||
{
|
{
|
||||||
bool srv_sign_required = server->sec_mode & SECMODE_SIGN_REQUIRED;
|
bool srv_sign_required = server->sec_mode & server->vals->signing_required;
|
||||||
bool srv_sign_enabled = server->sec_mode & SECMODE_SIGN_ENABLED;
|
bool srv_sign_enabled = server->sec_mode & server->vals->signing_enabled;
|
||||||
bool mnt_sign_enabled = global_secflags & CIFSSEC_MAY_SIGN;
|
bool mnt_sign_enabled = global_secflags & CIFSSEC_MAY_SIGN;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -957,4 +957,6 @@ struct smb_version_values smb1_values = {
|
||||||
.cap_nt_find = CAP_NT_SMBS | CAP_NT_FIND,
|
.cap_nt_find = CAP_NT_SMBS | CAP_NT_FIND,
|
||||||
.cap_large_files = CAP_LARGE_FILES,
|
.cap_large_files = CAP_LARGE_FILES,
|
||||||
.oplock_read = OPLOCK_READ,
|
.oplock_read = OPLOCK_READ,
|
||||||
|
.signing_enabled = SECMODE_SIGN_ENABLED,
|
||||||
|
.signing_required = SECMODE_SIGN_REQUIRED,
|
||||||
};
|
};
|
||||||
|
|
|
@ -729,6 +729,8 @@ struct smb_version_values smb20_values = {
|
||||||
.cap_nt_find = SMB2_NT_FIND,
|
.cap_nt_find = SMB2_NT_FIND,
|
||||||
.cap_large_files = SMB2_LARGE_FILES,
|
.cap_large_files = SMB2_LARGE_FILES,
|
||||||
.oplock_read = SMB2_OPLOCK_LEVEL_II,
|
.oplock_read = SMB2_OPLOCK_LEVEL_II,
|
||||||
|
.signing_enabled = SMB2_NEGOTIATE_SIGNING_ENABLED | SMB2_NEGOTIATE_SIGNING_REQUIRED,
|
||||||
|
.signing_required = SMB2_NEGOTIATE_SIGNING_REQUIRED,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct smb_version_values smb21_values = {
|
struct smb_version_values smb21_values = {
|
||||||
|
@ -747,6 +749,8 @@ struct smb_version_values smb21_values = {
|
||||||
.cap_nt_find = SMB2_NT_FIND,
|
.cap_nt_find = SMB2_NT_FIND,
|
||||||
.cap_large_files = SMB2_LARGE_FILES,
|
.cap_large_files = SMB2_LARGE_FILES,
|
||||||
.oplock_read = SMB2_OPLOCK_LEVEL_II,
|
.oplock_read = SMB2_OPLOCK_LEVEL_II,
|
||||||
|
.signing_enabled = SMB2_NEGOTIATE_SIGNING_ENABLED | SMB2_NEGOTIATE_SIGNING_REQUIRED,
|
||||||
|
.signing_required = SMB2_NEGOTIATE_SIGNING_REQUIRED,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct smb_version_values smb30_values = {
|
struct smb_version_values smb30_values = {
|
||||||
|
@ -765,6 +769,8 @@ struct smb_version_values smb30_values = {
|
||||||
.cap_nt_find = SMB2_NT_FIND,
|
.cap_nt_find = SMB2_NT_FIND,
|
||||||
.cap_large_files = SMB2_LARGE_FILES,
|
.cap_large_files = SMB2_LARGE_FILES,
|
||||||
.oplock_read = SMB2_OPLOCK_LEVEL_II,
|
.oplock_read = SMB2_OPLOCK_LEVEL_II,
|
||||||
|
.signing_enabled = SMB2_NEGOTIATE_SIGNING_ENABLED | SMB2_NEGOTIATE_SIGNING_REQUIRED,
|
||||||
|
.signing_required = SMB2_NEGOTIATE_SIGNING_REQUIRED,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct smb_version_values smb302_values = {
|
struct smb_version_values smb302_values = {
|
||||||
|
@ -783,4 +789,6 @@ struct smb_version_values smb302_values = {
|
||||||
.cap_nt_find = SMB2_NT_FIND,
|
.cap_nt_find = SMB2_NT_FIND,
|
||||||
.cap_large_files = SMB2_LARGE_FILES,
|
.cap_large_files = SMB2_LARGE_FILES,
|
||||||
.oplock_read = SMB2_OPLOCK_LEVEL_II,
|
.oplock_read = SMB2_OPLOCK_LEVEL_II,
|
||||||
|
.signing_enabled = SMB2_NEGOTIATE_SIGNING_ENABLED | SMB2_NEGOTIATE_SIGNING_REQUIRED,
|
||||||
|
.signing_required = SMB2_NEGOTIATE_SIGNING_REQUIRED,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue