]> git.baikalelectronics.ru Git - kernel.git/commit
netfilter: bridge: add support for pppoe filtering
authorFlorian Westphal <fw@strlen.de>
Tue, 23 Nov 2021 11:50:31 +0000 (12:50 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 30 Nov 2021 22:37:55 +0000 (23:37 +0100)
commit671f15df54cb30d43b873cbe5cc41eedd7c0e6d6
tree88fcf646b03bdaa0042da12c1b53fa8bf1daa71d
parent5bd078f4a64de8d1460d3d33cff2262c6588d231
netfilter: bridge: add support for pppoe filtering

This makes 'bridge-nf-filter-pppoe-tagged' sysctl work for
bridged traffic.

Looking at the original commit it doesn't appear this ever worked:

 static unsigned int br_nf_post_routing(unsigned int hook, struct sk_buff **pskb,
[..]
        if (skb->protocol == htons(ETH_P_8021Q)) {
                skb_pull(skb, VLAN_HLEN);
                skb->network_header += VLAN_HLEN;
+       } else if (skb->protocol == htons(ETH_P_PPP_SES)) {
+               skb_pull(skb, PPPOE_SES_HLEN);
+               skb->network_header += PPPOE_SES_HLEN;
        }
 [..]
NF_HOOK(... POST_ROUTING, ...)

... but the adjusted offsets are never restored.

The alternative would be to rip this code out for good,
but otoh we'd have to keep this anyway for the vlan handling
(which works because vlan tag info is in the skb, not the packet
 payload).

Reported-and-tested-by: Amish Chana <amish@3g.co.za>
Fixes: 7e87a04152a5a20 ("[NETFILTER]: bridge-nf: filter bridged IPv4/IPv6 encapsulated in pppoe traffic")
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/bridge/br_netfilter_hooks.c