[RFC] bridge: check address size
From: Stephen Hemminger <hidden>
Date: 2009-10-29 22:24:09
Check the address size of underlying device because the bridge assumes the underlying device has ethernet address format. See forwarding table and STP, for places where this true. Also, add some comments to explain errors. Signed-off-by: Stephen Hemminger <redacted>
--- a/net/bridge/br_if.c 2009-10-29 15:18:48.363916679 -0700
+++ b/net/bridge/br_if.c 2009-10-29 15:21:38.142667043 -0700@@ -377,12 +377,17 @@ int br_add_if(struct net_bridge *br, str struct net_bridge_port *p; int err = 0; - if (dev->flags & IFF_LOOPBACK || dev->type != ARPHRD_ETHER) + /* Don't allow bridging non ethernet like devices */ + if (dev->flags & IFF_LOOPBACK + || dev->type != ARPHRD_ETHER + || dev->addr_len != ETH_ALEN) return -EINVAL; + /* No bridging of bridges */ if (dev->netdev_ops->ndo_start_xmit == br_dev_xmit) return -ELOOP; + /* Device is already being bridged */ if (dev->br_port != NULL) return -EBUSY;