|
@@ -87,9 +87,15 @@ int cifs_sign_smb(struct smb_hdr *cifs_pdu, struct TCP_Server_Info *server,
|
|
|
if ((cifs_pdu == NULL) || (server == NULL))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if ((cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) == 0)
|
|
|
+ if (!(cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) ||
|
|
|
+ server->tcpStatus == CifsNeedNegotiate)
|
|
|
return rc;
|
|
|
|
|
|
+ if (!server->session_estab) {
|
|
|
+ strncpy(cifs_pdu->Signature.SecuritySignature, "BSRSPYL", 8);
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+
|
|
|
cifs_pdu->Signature.Sequence.SequenceNumber =
|
|
|
cpu_to_le32(server->sequence_number);
|
|
|
cifs_pdu->Signature.Sequence.Reserved = 0;
|
|
@@ -178,9 +184,15 @@ int cifs_sign_smb2(struct kvec *iov, int n_vec, struct TCP_Server_Info *server,
|
|
|
if ((cifs_pdu == NULL) || (server == NULL))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if ((cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) == 0)
|
|
|
+ if (!(cifs_pdu->Flags2 & SMBFLG2_SECURITY_SIGNATURE) ||
|
|
|
+ server->tcpStatus == CifsNeedNegotiate)
|
|
|
return rc;
|
|
|
|
|
|
+ if (!server->session_estab) {
|
|
|
+ strncpy(cifs_pdu->Signature.SecuritySignature, "BSRSPYL", 8);
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+
|
|
|
cifs_pdu->Signature.Sequence.SequenceNumber =
|
|
|
cpu_to_le32(server->sequence_number);
|
|
|
cifs_pdu->Signature.Sequence.Reserved = 0;
|