Commit 05d0f8f5 authored by Steve French's avatar Steve French
Browse files

smb3: move server check earlier when setting channel sequence number



Smatch warning pointed out by Dan Carpenter:

    fs/smb/client/smb2pdu.c:105 smb2_hdr_assemble()
    warn: variable dereferenced before check 'server' (see line 95)

Fixes: 09ee7a3b ("[SMB3] send channel sequence number in SMB3 requests after reconnects")
Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 0bb80ecc
Loading
Loading
Loading
Loading
+15 −10
Original line number Diff line number Diff line
@@ -92,17 +92,22 @@ smb2_hdr_assemble(struct smb2_hdr *shdr, __le16 smb2_cmd,
	shdr->ProtocolId = SMB2_PROTO_NUMBER;
	shdr->StructureSize = cpu_to_le16(64);
	shdr->Command = smb2_cmd;
	if (server->dialect >= SMB30_PROT_ID) {

	if (server) {
		/* After reconnect SMB3 must set ChannelSequence on subsequent reqs */
		if (server->dialect >= SMB30_PROT_ID) {
			smb3_hdr = (struct smb3_hdr_req *)shdr;
		/* if primary channel is not set yet, use default channel for chan sequence num */
			/*
			 * if primary channel is not set yet, use default
			 * channel for chan sequence num
			 */
			if (SERVER_IS_CHAN(server))
				smb3_hdr->ChannelSequence =
					cpu_to_le16(server->primary_server->channel_sequence_num);
			else
			smb3_hdr->ChannelSequence = cpu_to_le16(server->channel_sequence_num);
				smb3_hdr->ChannelSequence =
					cpu_to_le16(server->channel_sequence_num);
		}
	if (server) {
		spin_lock(&server->req_lock);
		/* Request up to 10 credits but don't go over the limit. */
		if (server->credits >= server->max_credits)