mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
netfilter: nft_socket: fix sk refcount leaks
[ Upstream commit 8b26ff7af8c32cb4148b3e147c52f9e4c695209c ]
We must put 'sk' reference before returning.
Fixes: 039b1f4f24 ("netfilter: nft_socket: fix erroneous socket assignment")
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
bb8cb61543
commit
33c2258bf8
@@ -110,13 +110,13 @@ static void nft_socket_eval(const struct nft_expr *expr,
|
|||||||
*dest = READ_ONCE(sk->sk_mark);
|
*dest = READ_ONCE(sk->sk_mark);
|
||||||
} else {
|
} else {
|
||||||
regs->verdict.code = NFT_BREAK;
|
regs->verdict.code = NFT_BREAK;
|
||||||
return;
|
goto out_put_sk;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NFT_SOCKET_WILDCARD:
|
case NFT_SOCKET_WILDCARD:
|
||||||
if (!sk_fullsock(sk)) {
|
if (!sk_fullsock(sk)) {
|
||||||
regs->verdict.code = NFT_BREAK;
|
regs->verdict.code = NFT_BREAK;
|
||||||
return;
|
goto out_put_sk;
|
||||||
}
|
}
|
||||||
nft_socket_wildcard(pkt, regs, sk, dest);
|
nft_socket_wildcard(pkt, regs, sk, dest);
|
||||||
break;
|
break;
|
||||||
@@ -124,7 +124,7 @@ static void nft_socket_eval(const struct nft_expr *expr,
|
|||||||
case NFT_SOCKET_CGROUPV2:
|
case NFT_SOCKET_CGROUPV2:
|
||||||
if (!nft_sock_get_eval_cgroupv2(dest, sk, pkt, priv->level)) {
|
if (!nft_sock_get_eval_cgroupv2(dest, sk, pkt, priv->level)) {
|
||||||
regs->verdict.code = NFT_BREAK;
|
regs->verdict.code = NFT_BREAK;
|
||||||
return;
|
goto out_put_sk;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
@@ -133,6 +133,7 @@ static void nft_socket_eval(const struct nft_expr *expr,
|
|||||||
regs->verdict.code = NFT_BREAK;
|
regs->verdict.code = NFT_BREAK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
out_put_sk:
|
||||||
if (sk != skb->sk)
|
if (sk != skb->sk)
|
||||||
sock_gen_put(sk);
|
sock_gen_put(sk);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user