Do not send ClientGUID on SMB2.02 dialect
[cascardo/linux.git] / fs / cifs / smb2pdu.c
index 8603447..0feb743 100644 (file)
@@ -375,7 +375,12 @@ SMB2_negotiate(const unsigned int xid, struct cifs_ses *ses)
 
        req->Capabilities = cpu_to_le32(ses->server->vals->req_capabilities);
 
-       memcpy(req->ClientGUID, cifs_client_guid, SMB2_CLIENT_GUID_SIZE);
+       /* ClientGUID must be zero for SMB2.02 dialect */
+       if (ses->server->vals->protocol_id == SMB20_PROT_ID)
+               memset(req->ClientGUID, 0, SMB2_CLIENT_GUID_SIZE);
+       else
+               memcpy(req->ClientGUID, server->client_guid,
+                       SMB2_CLIENT_GUID_SIZE);
 
        iov[0].iov_base = (char *)req;
        /* 4 for rfc1002 length field */
@@ -478,7 +483,8 @@ int smb3_validate_negotiate(const unsigned int xid, struct cifs_tcon *tcon)
 
        vneg_inbuf.Capabilities =
                        cpu_to_le32(tcon->ses->server->vals->req_capabilities);
-       memcpy(vneg_inbuf.Guid, cifs_client_guid, SMB2_CLIENT_GUID_SIZE);
+       memcpy(vneg_inbuf.Guid, tcon->ses->server->client_guid,
+                                       SMB2_CLIENT_GUID_SIZE);
 
        if (tcon->ses->sign)
                vneg_inbuf.SecurityMode =
@@ -1352,7 +1358,6 @@ SMB2_set_compression(const unsigned int xid, struct cifs_tcon *tcon,
                     u64 persistent_fid, u64 volatile_fid)
 {
        int rc;
-       char *res_key = NULL;
        struct  compress_ioctl fsctl_input;
        char *ret_data = NULL;
 
@@ -1365,7 +1370,6 @@ SMB2_set_compression(const unsigned int xid, struct cifs_tcon *tcon,
                        2 /* in data len */, &ret_data /* out data */, NULL);
 
        cifs_dbg(FYI, "set compression rc %d\n", rc);
-       kfree(res_key);
 
        return rc;
 }