Skip to content

Commit 3818977

Browse files
YueHaibingdavem330
authored andcommitted
net/smc: fix sizeof to int comparison
Comparing an int to a size, which is unsigned, causes the int to become unsigned, giving the wrong result. kernel_sendmsg can return a negative error code. Signed-off-by: YueHaibing <yuehaibing@huawei.com> Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 71d117f commit 3818977

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

net/smc/smc_clc.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -446,14 +446,12 @@ int smc_clc_send_proposal(struct smc_sock *smc, int smc_type,
446446
vec[i++].iov_len = sizeof(trl);
447447
/* due to the few bytes needed for clc-handshake this cannot block */
448448
len = kernel_sendmsg(smc->clcsock, &msg, vec, i, plen);
449-
if (len < sizeof(pclc)) {
450-
if (len >= 0) {
451-
reason_code = -ENETUNREACH;
452-
smc->sk.sk_err = -reason_code;
453-
} else {
454-
smc->sk.sk_err = smc->clcsock->sk->sk_err;
455-
reason_code = -smc->sk.sk_err;
456-
}
449+
if (len < 0) {
450+
smc->sk.sk_err = smc->clcsock->sk->sk_err;
451+
reason_code = -smc->sk.sk_err;
452+
} else if (len < (int)sizeof(pclc)) {
453+
reason_code = -ENETUNREACH;
454+
smc->sk.sk_err = -reason_code;
457455
}
458456

459457
return reason_code;

0 commit comments

Comments
 (0)