Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
Pablo Neira Ayuso says: ==================== Netfilter fixes for net The following patchset contains Netfilter fixes for net: 1) br_netfilter drops IPv6 packets if ipv6 is disabled, from Leonardo Bras. 2) nft_socket hits BUG() due to illegal skb->sk caching, patch from Fernando Fernandez Mancera. 3) nft_fib_netdev could be called with ipv6 disabled, leading to crash in the fib lookup, also from Leonardo. 4) ctnetlink honors IPS_OFFLOAD flag, just like nf_conntrack sysctl does. 5) Properly set up flowtable entry timeout, otherwise immediate removal by garbage collector might occur. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
d471c6f774
|
@ -496,6 +496,10 @@ static unsigned int br_nf_pre_routing(void *priv,
|
|||
if (!brnet->call_ip6tables &&
|
||||
!br_opt_get(br, BROPT_NF_CALL_IP6TABLES))
|
||||
return NF_ACCEPT;
|
||||
if (!ipv6_mod_enabled()) {
|
||||
pr_warn_once("Module ipv6 is disabled, so call_ip6tables is not supported.");
|
||||
return NF_DROP;
|
||||
}
|
||||
|
||||
nf_bridge_pull_encap_header_rcsum(skb);
|
||||
return br_nf_pre_routing_ipv6(priv, skb, state);
|
||||
|
|
|
@ -553,10 +553,8 @@ ctnetlink_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type,
|
|||
goto nla_put_failure;
|
||||
|
||||
if (ctnetlink_dump_status(skb, ct) < 0 ||
|
||||
ctnetlink_dump_timeout(skb, ct) < 0 ||
|
||||
ctnetlink_dump_acct(skb, ct, type) < 0 ||
|
||||
ctnetlink_dump_timestamp(skb, ct) < 0 ||
|
||||
ctnetlink_dump_protoinfo(skb, ct) < 0 ||
|
||||
ctnetlink_dump_helpinfo(skb, ct) < 0 ||
|
||||
ctnetlink_dump_mark(skb, ct) < 0 ||
|
||||
ctnetlink_dump_secctx(skb, ct) < 0 ||
|
||||
|
@ -568,6 +566,11 @@ ctnetlink_fill_info(struct sk_buff *skb, u32 portid, u32 seq, u32 type,
|
|||
ctnetlink_dump_ct_synproxy(skb, ct) < 0)
|
||||
goto nla_put_failure;
|
||||
|
||||
if (!test_bit(IPS_OFFLOAD_BIT, &ct->status) &&
|
||||
(ctnetlink_dump_timeout(skb, ct) < 0 ||
|
||||
ctnetlink_dump_protoinfo(skb, ct) < 0))
|
||||
goto nla_put_failure;
|
||||
|
||||
nlmsg_end(skb, nlh);
|
||||
return skb->len;
|
||||
|
||||
|
|
|
@ -217,7 +217,7 @@ int flow_offload_add(struct nf_flowtable *flow_table, struct flow_offload *flow)
|
|||
return err;
|
||||
}
|
||||
|
||||
flow->timeout = (u32)jiffies;
|
||||
flow->timeout = (u32)jiffies + NF_FLOW_TIMEOUT;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(flow_offload_add);
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/netfilter/nf_tables.h>
|
||||
#include <net/netfilter/nf_tables_core.h>
|
||||
#include <net/netfilter/nf_tables.h>
|
||||
#include <net/ipv6.h>
|
||||
|
||||
#include <net/netfilter/nft_fib.h>
|
||||
|
||||
|
@ -34,6 +35,8 @@ static void nft_fib_netdev_eval(const struct nft_expr *expr,
|
|||
}
|
||||
break;
|
||||
case ETH_P_IPV6:
|
||||
if (!ipv6_mod_enabled())
|
||||
break;
|
||||
switch (priv->result) {
|
||||
case NFT_FIB_RESULT_OIF:
|
||||
case NFT_FIB_RESULT_OIFNAME:
|
||||
|
|
|
@ -47,9 +47,6 @@ static void nft_socket_eval(const struct nft_expr *expr,
|
|||
return;
|
||||
}
|
||||
|
||||
/* So that subsequent socket matching not to require other lookups. */
|
||||
skb->sk = sk;
|
||||
|
||||
switch(priv->key) {
|
||||
case NFT_SOCKET_TRANSPARENT:
|
||||
nft_reg_store8(dest, inet_sk_transparent(sk));
|
||||
|
@ -66,6 +63,9 @@ static void nft_socket_eval(const struct nft_expr *expr,
|
|||
WARN_ON(1);
|
||||
regs->verdict.code = NFT_BREAK;
|
||||
}
|
||||
|
||||
if (sk != skb->sk)
|
||||
sock_gen_put(sk);
|
||||
}
|
||||
|
||||
static const struct nla_policy nft_socket_policy[NFTA_SOCKET_MAX + 1] = {
|
||||
|
|
Loading…
Reference in New Issue