diff --git a/net/smc/smc_clc.c b/net/smc/smc_clc.c index 3d0139250cc854135417804215ce35126eb8401a..1d8a4b8b7c860852f9d44281266313da148a54f1 100644 --- a/net/smc/smc_clc.c +++ b/net/smc/smc_clc.c @@ -770,6 +770,11 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen, SMC_CLC_RECV_BUF_LEN : datlen; iov_iter_kvec(&msg.msg_iter, ITER_DEST, &vec, 1, recvlen); len = sock_recvmsg(smc->clcsock, &msg, krflags); + if (len < recvlen) { + smc->sk.sk_err = EPROTO; + reason_code = -EPROTO; + goto out; + } datlen -= len; } if (clcm->type == SMC_CLC_DECLINE) {