Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next
Pablo Neira Ayuso says: ==================== Netfilter updates for net-next The following patchset contains Netfilter updates for your net-next tree. Basically, improvements for the packet rejection infrastructure, deprecation of CLUSTERIP, cleanups for nf_tables and some untangling for br_netfilter. More specifically they are: 1) Send packet to reset flow if checksum is valid, from Florian Westphal. 2) Fix nf_tables reject bridge from the input chain, also from Florian. 3) Deprecate the CLUSTERIP target, the cluster match supersedes it in functionality and it's known to have problems. 4) A couple of cleanups for nf_tables rule tracing infrastructure, from Patrick McHardy. 5) Another cleanup to place transaction declarations at the bottom of nf_tables.h, also from Patrick. 6) Consolidate Kconfig dependencies wrt. NF_TABLES. 7) Limit table names to 32 bytes in nf_tables. 8) mac header copying in bridge netfilter is already required when calling ip_fragment(), from Florian Westphal. 9) move nf_bridge_update_protocol() to br_netfilter.c, also from Florian. 10) Small refactor in br_netfilter in the transmission path, again from Florian. 11) Move br_nf_pre_routing_finish_bridge_slow() to br_netfilter. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -25,14 +25,16 @@ config NF_CONNTRACK_IPV6
|
||||
|
||||
To compile it as a module, choose M here. If unsure, say N.
|
||||
|
||||
if NF_TABLES
|
||||
|
||||
config NF_TABLES_IPV6
|
||||
depends on NF_TABLES
|
||||
tristate "IPv6 nf_tables support"
|
||||
help
|
||||
This option enables the IPv6 support for nf_tables.
|
||||
|
||||
if NF_TABLES_IPV6
|
||||
|
||||
config NFT_CHAIN_ROUTE_IPV6
|
||||
depends on NF_TABLES_IPV6
|
||||
tristate "IPv6 nf_tables route chain support"
|
||||
help
|
||||
This option enables the "route" chain for IPv6 in nf_tables. This
|
||||
@@ -40,16 +42,18 @@ config NFT_CHAIN_ROUTE_IPV6
|
||||
fields such as the source, destination, flowlabel, hop-limit and
|
||||
the packet mark.
|
||||
|
||||
config NF_REJECT_IPV6
|
||||
tristate "IPv6 packet rejection"
|
||||
default m if NETFILTER_ADVANCED=n
|
||||
|
||||
config NFT_REJECT_IPV6
|
||||
depends on NF_TABLES_IPV6
|
||||
select NF_REJECT_IPV6
|
||||
default NFT_REJECT
|
||||
tristate
|
||||
|
||||
endif # NF_TABLES_IPV6
|
||||
endif # NF_TABLES
|
||||
|
||||
config NF_REJECT_IPV6
|
||||
tristate "IPv6 packet rejection"
|
||||
default m if NETFILTER_ADVANCED=n
|
||||
|
||||
config NF_LOG_IPV6
|
||||
tristate "IPv6 packet logging"
|
||||
default m if NETFILTER_ADVANCED=n
|
||||
|
@@ -208,4 +208,39 @@ void nf_send_reset6(struct net *net, struct sk_buff *oldskb, int hook)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_send_reset6);
|
||||
|
||||
static bool reject6_csum_ok(struct sk_buff *skb, int hook)
|
||||
{
|
||||
const struct ipv6hdr *ip6h = ipv6_hdr(skb);
|
||||
int thoff;
|
||||
__be16 fo;
|
||||
u8 proto;
|
||||
|
||||
if (skb->csum_bad)
|
||||
return false;
|
||||
|
||||
if (skb_csum_unnecessary(skb))
|
||||
return true;
|
||||
|
||||
proto = ip6h->nexthdr;
|
||||
thoff = ipv6_skip_exthdr(skb, ((u8*)(ip6h+1) - skb->data), &proto, &fo);
|
||||
|
||||
if (thoff < 0 || thoff >= skb->len || (fo & htons(~0x7)) != 0)
|
||||
return false;
|
||||
|
||||
return nf_ip6_checksum(skb, hook, thoff, proto) == 0;
|
||||
}
|
||||
|
||||
void nf_send_unreach6(struct net *net, struct sk_buff *skb_in,
|
||||
unsigned char code, unsigned int hooknum)
|
||||
{
|
||||
if (!reject6_csum_ok(skb_in, hooknum))
|
||||
return;
|
||||
|
||||
if (hooknum == NF_INET_LOCAL_OUT && skb_in->dev == NULL)
|
||||
skb_in->dev = net->loopback_dev;
|
||||
|
||||
icmpv6_send(skb_in, ICMPV6_DEST_UNREACH, code, 0);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nf_send_unreach6);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
Reference in New Issue
Block a user