[BRIDGE]: Fix crash in __ip_route_output_key with bridge netfilter
authorPatrick McHardy <kaber@trash.net>
Mon, 14 Apr 2008 07:46:01 +0000 (00:46 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Apr 2008 07:46:01 +0000 (00:46 -0700)
The bridge netfilter code attaches a fake dst_entry with a pointer to a
fake net_device structure to skbs it passes up to IPv4 netfilter. This
leads to crashes when the skb is passed to __ip_route_output_key when
dereferencing the namespace pointer.

Since bridging can currently only operate in the init_net namespace,
the easiest fix for now is to initialize the nd_net pointer of the
fake net_device struct to &init_net.

Should fix bugzilla 10323: http://bugzilla.kernel.org/show_bug.cgi?id=10323

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_netfilter.c

index 1c0efd8ad9f311ef2ed676891d5b0c28a858d1fa..af7e8be8d8d2e85ffc853ea6c04163b7bd36c92d 100644 (file)
@@ -110,7 +110,8 @@ static inline __be16 pppoe_proto(const struct sk_buff *skb)
  * ipt_REJECT needs it.  Future netfilter modules might
  * require us to fill additional fields. */
 static struct net_device __fake_net_device = {
-       .hard_header_len        = ETH_HLEN
+       .hard_header_len        = ETH_HLEN,
+       .nd_net                 = &init_net,
 };
 
 static struct rtable __fake_rtable = {