net/smc: unlock on error paths in __smc_setsockopt()
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 18 Feb 2022 15:32:59 +0000 (18:32 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sat, 19 Feb 2022 18:54:43 +0000 (18:54 +0000)
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 <dan.carpenter@oracle.com>
Reviewed-by: D. Wythe <alibuda@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/smc/af_smc.c

index b40ae4d..30acc31 100644 (file)
@@ -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;