diff options
author | Stephen Hemminger <shemminger@vyatta.com> | 2009-11-05 20:46:52 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-05 20:46:52 -0800 |
commit | 1056bd51674e529813213186471bb4ac6689a755 (patch) | |
tree | 9843cf9f4a07caadbf1d733de0b9d495554ab799 /net | |
parent | 22402529df88ec39a59b08a46bced73dd5722b64 (diff) | |
download | op-kernel-dev-1056bd51674e529813213186471bb4ac6689a755.zip op-kernel-dev-1056bd51674e529813213186471bb4ac6689a755.tar.gz |
bridge: prevent bridging wrong device
The bridge code assumes ethernet addressing, so be more strict in
the what is allowed. This showed up when GRE had a bug and was not
using correct address format.
Add some more comments for increased clarity.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/bridge/br_if.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index b1b3b0f..4a9f527 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -377,12 +377,16 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) 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; |