Skip to content

Commit 05d0f8f

Browse files
author
Steve French
committed
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: 09ee7a3 ("[SMB3] send channel sequence number in SMB3 requests after reconnects") Reported-by: Dan Carpenter <dan.carpenter@linaro.org> Signed-off-by: Steve French <stfrench@microsoft.com>
1 parent 0bb80ec commit 05d0f8f

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

fs/smb/client/smb2pdu.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,22 @@ smb2_hdr_assemble(struct smb2_hdr *shdr, __le16 smb2_cmd,
9292
shdr->ProtocolId = SMB2_PROTO_NUMBER;
9393
shdr->StructureSize = cpu_to_le16(64);
9494
shdr->Command = smb2_cmd;
95-
if (server->dialect >= SMB30_PROT_ID) {
96-
/* After reconnect SMB3 must set ChannelSequence on subsequent reqs */
97-
smb3_hdr = (struct smb3_hdr_req *)shdr;
98-
/* if primary channel is not set yet, use default channel for chan sequence num */
99-
if (SERVER_IS_CHAN(server))
100-
smb3_hdr->ChannelSequence =
101-
cpu_to_le16(server->primary_server->channel_sequence_num);
102-
else
103-
smb3_hdr->ChannelSequence = cpu_to_le16(server->channel_sequence_num);
104-
}
95+
10596
if (server) {
97+
/* After reconnect SMB3 must set ChannelSequence on subsequent reqs */
98+
if (server->dialect >= SMB30_PROT_ID) {
99+
smb3_hdr = (struct smb3_hdr_req *)shdr;
100+
/*
101+
* if primary channel is not set yet, use default
102+
* channel for chan sequence num
103+
*/
104+
if (SERVER_IS_CHAN(server))
105+
smb3_hdr->ChannelSequence =
106+
cpu_to_le16(server->primary_server->channel_sequence_num);
107+
else
108+
smb3_hdr->ChannelSequence =
109+
cpu_to_le16(server->channel_sequence_num);
110+
}
106111
spin_lock(&server->req_lock);
107112
/* Request up to 10 credits but don't go over the limit. */
108113
if (server->credits >= server->max_credits)

0 commit comments

Comments
 (0)