mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-06 17:35:20 +02:00
netfilter: nft_socket: fix sk refcount leaks
[ Upstream commit8b26ff7af8
] 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:
parent
033a71efab
commit
83e6fb5904
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user