From: Dan Carpenter Date: Fri, 18 Feb 2022 15:32:59 +0000 (+0300) Subject: net/smc: unlock on error paths in __smc_setsockopt() X-Git-Tag: v6.6.17~7931^2~295 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7a11455f376de8a4357af4a20ae68fefe29b8ceb;p=platform%2Fkernel%2Flinux-rpi.git net/smc: unlock on error paths in __smc_setsockopt() These two error paths need to release_sock(sk) before returning. Fixes: a6a6fe27bab4 ("net/smc: Dynamic control handshake limitation by socket options") Signed-off-by: Dan Carpenter Reviewed-by: D. Wythe Signed-off-by: David S. Miller --- diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index b40ae4d..30acc31 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c @@ -2715,10 +2715,14 @@ static int __smc_setsockopt(struct socket *sock, int level, int optname, lock_sock(sk); switch (optname) { case SMC_LIMIT_HS: - if (optlen < sizeof(int)) - return -EINVAL; - if (copy_from_sockptr(&val, optval, sizeof(int))) - return -EFAULT; + if (optlen < sizeof(int)) { + rc = -EINVAL; + break; + } + if (copy_from_sockptr(&val, optval, sizeof(int))) { + rc = -EFAULT; + break; + } smc->limit_smc_hs = !!val; rc = 0;