Commit 8b26ff7a authored by Florian Westphal's avatar Florian Westphal Committed by Pablo Neira Ayuso
Browse files

netfilter: nft_socket: fix sk refcount leaks



We must put 'sk' reference before returning.

Fixes: 039b1f4f ("netfilter: nft_socket: fix erroneous socket assignment")
Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent d759ee24
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -110,13 +110,13 @@ static void nft_socket_eval(const struct nft_expr *expr,
			*dest = READ_ONCE(sk->sk_mark);
		} else {
			regs->verdict.code = NFT_BREAK;
			return;
			goto out_put_sk;
		}
		break;
	case NFT_SOCKET_WILDCARD:
		if (!sk_fullsock(sk)) {
			regs->verdict.code = NFT_BREAK;
			return;
			goto out_put_sk;
		}
		nft_socket_wildcard(pkt, regs, sk, dest);
		break;
@@ -124,7 +124,7 @@ static void nft_socket_eval(const struct nft_expr *expr,
	case NFT_SOCKET_CGROUPV2:
		if (!nft_sock_get_eval_cgroupv2(dest, sk, pkt, priv->level)) {
			regs->verdict.code = NFT_BREAK;
			return;
			goto out_put_sk;
		}
		break;
#endif
@@ -133,6 +133,7 @@ static void nft_socket_eval(const struct nft_expr *expr,
		regs->verdict.code = NFT_BREAK;
	}

out_put_sk:
	if (sk != skb->sk)
		sock_gen_put(sk);
}