Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7fb48c5b authored by Florian Westphal's avatar Florian Westphal Committed by Pablo Neira Ayuso
Browse files

netfilter: bridge: neigh_head and physoutdev can't be used at same time



The neigh_header is only needed when we detect DNAT after prerouting
and neigh cache didn't have a mac address for us.

The output port has not been chosen yet so we can re-use the storage
area, bringing struct size down to 32 bytes on x86_64.

Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
parent a9756e6f
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -170,13 +170,15 @@ struct nf_bridge_info {
		BRNF_PROTO_UNCHANGED,
		BRNF_PROTO_8021Q,
		BRNF_PROTO_PPPOE
	} orig_proto;
	} orig_proto:8;
	bool			pkt_otherhost;
	unsigned int		mask;
	struct net_device	*physindev;
	union {
		struct net_device *physoutdev;
		char neigh_header[8];
	};
};
#endif

struct sk_buff_head {
+2 −0
Original line number Diff line number Diff line
@@ -973,6 +973,8 @@ static void br_nf_pre_routing_finish_bridge_slow(struct sk_buff *skb)
				       nf_bridge->neigh_header,
				       ETH_HLEN - ETH_ALEN);
	skb->dev = nf_bridge->physindev;

	nf_bridge->physoutdev = NULL;
	br_handle_frame_finish(NULL, skb);
}