mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-17 22:05:08 +00:00
netfilter: xt_socket: fix broken v0 support
commit 681f130f39e10 ("netfilter: xt_socket: add XT_SOCKET_NOWILDCARD flag") added a potential NULL dereference if an old iptables package uses v0 of the match. Fix this by removing the test on @info in fast path. IPv6 can remove the test as well, as it uses v1 or v2. Reported-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Patrick McHardy <kaber@trash.net> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
parent
f09eca8db0
commit
baf60efa58
@ -172,7 +172,7 @@ socket_match(const struct sk_buff *skb, struct xt_action_param *par,
|
|||||||
|
|
||||||
/* Ignore non-transparent sockets,
|
/* Ignore non-transparent sockets,
|
||||||
if XT_SOCKET_TRANSPARENT is used */
|
if XT_SOCKET_TRANSPARENT is used */
|
||||||
if (info && info->flags & XT_SOCKET_TRANSPARENT)
|
if (info->flags & XT_SOCKET_TRANSPARENT)
|
||||||
transparent = ((sk->sk_state != TCP_TIME_WAIT &&
|
transparent = ((sk->sk_state != TCP_TIME_WAIT &&
|
||||||
inet_sk(sk)->transparent) ||
|
inet_sk(sk)->transparent) ||
|
||||||
(sk->sk_state == TCP_TIME_WAIT &&
|
(sk->sk_state == TCP_TIME_WAIT &&
|
||||||
@ -196,7 +196,11 @@ socket_match(const struct sk_buff *skb, struct xt_action_param *par,
|
|||||||
static bool
|
static bool
|
||||||
socket_mt4_v0(const struct sk_buff *skb, struct xt_action_param *par)
|
socket_mt4_v0(const struct sk_buff *skb, struct xt_action_param *par)
|
||||||
{
|
{
|
||||||
return socket_match(skb, par, NULL);
|
static struct xt_socket_mtinfo1 xt_info_v0 = {
|
||||||
|
.flags = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
return socket_match(skb, par, &xt_info_v0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@ -314,7 +318,7 @@ socket_mt6_v1_v2(const struct sk_buff *skb, struct xt_action_param *par)
|
|||||||
|
|
||||||
/* Ignore non-transparent sockets,
|
/* Ignore non-transparent sockets,
|
||||||
if XT_SOCKET_TRANSPARENT is used */
|
if XT_SOCKET_TRANSPARENT is used */
|
||||||
if (info && info->flags & XT_SOCKET_TRANSPARENT)
|
if (info->flags & XT_SOCKET_TRANSPARENT)
|
||||||
transparent = ((sk->sk_state != TCP_TIME_WAIT &&
|
transparent = ((sk->sk_state != TCP_TIME_WAIT &&
|
||||||
inet_sk(sk)->transparent) ||
|
inet_sk(sk)->transparent) ||
|
||||||
(sk->sk_state == TCP_TIME_WAIT &&
|
(sk->sk_state == TCP_TIME_WAIT &&
|
||||||
|
Loading…
x
Reference in New Issue
Block a user