diff options
Diffstat (limited to 'net/bridge')
| -rw-r--r-- | net/bridge/br_device.c | 2 | ||||
| -rw-r--r-- | net/bridge/br_input.c | 2 | ||||
| -rw-r--r-- | net/bridge/br_mdb.c | 4 | ||||
| -rw-r--r-- | net/bridge/br_multicast.c | 3 | ||||
| -rw-r--r-- | net/bridge/br_private.h | 4 | 
5 files changed, 10 insertions, 5 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index d5f1d3fd4b2..314c73ed418 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -66,7 +66,7 @@ netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)  			goto out;  		} -		mdst = br_mdb_get(br, skb); +		mdst = br_mdb_get(br, skb, vid);  		if (mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb))  			br_multicast_deliver(mdst, skb);  		else diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 48033015189..828e2bcc1f5 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c @@ -97,7 +97,7 @@ int br_handle_frame_finish(struct sk_buff *skb)  	if (is_broadcast_ether_addr(dest))  		skb2 = skb;  	else if (is_multicast_ether_addr(dest)) { -		mdst = br_mdb_get(br, skb); +		mdst = br_mdb_get(br, skb, vid);  		if (mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) {  			if ((mdst && mdst->mglist) ||  			    br_multicast_is_router(br)) diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c index 9f97b850fc6..ee79f3f2038 100644 --- a/net/bridge/br_mdb.c +++ b/net/bridge/br_mdb.c @@ -80,6 +80,7 @@ static int br_mdb_fill_info(struct sk_buff *skb, struct netlink_callback *cb,  				port = p->port;  				if (port) {  					struct br_mdb_entry e; +					memset(&e, 0, sizeof(e));  					e.ifindex = port->dev->ifindex;  					e.state = p->state;  					if (p->addr.proto == htons(ETH_P_IP)) @@ -136,6 +137,7 @@ static int br_mdb_dump(struct sk_buff *skb, struct netlink_callback *cb)  				break;  			bpm = nlmsg_data(nlh); +			memset(bpm, 0, sizeof(*bpm));  			bpm->ifindex = dev->ifindex;  			if (br_mdb_fill_info(skb, cb, dev) < 0)  				goto out; @@ -171,6 +173,7 @@ static int nlmsg_populate_mdb_fill(struct sk_buff *skb,  		return -EMSGSIZE;  	bpm = nlmsg_data(nlh); +	memset(bpm, 0, sizeof(*bpm));  	bpm->family  = AF_BRIDGE;  	bpm->ifindex = dev->ifindex;  	nest = nla_nest_start(skb, MDBA_MDB); @@ -228,6 +231,7 @@ void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,  {  	struct br_mdb_entry entry; +	memset(&entry, 0, sizeof(entry));  	entry.ifindex = port->dev->ifindex;  	entry.addr.proto = group->proto;  	entry.addr.u.ip4 = group->u.ip4; diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 10e6fce1bb6..923fbeaf7af 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -132,7 +132,7 @@ static struct net_bridge_mdb_entry *br_mdb_ip6_get(  #endif  struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br, -					struct sk_buff *skb) +					struct sk_buff *skb, u16 vid)  {  	struct net_bridge_mdb_htable *mdb = rcu_dereference(br->mdb);  	struct br_ip ip; @@ -144,6 +144,7 @@ struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br,  		return NULL;  	ip.proto = skb->protocol; +	ip.vid = vid;  	switch (skb->protocol) {  	case htons(ETH_P_IP): diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index 6d314c4e6bc..3cbf5beb3d4 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -442,7 +442,7 @@ extern int br_multicast_rcv(struct net_bridge *br,  			    struct net_bridge_port *port,  			    struct sk_buff *skb);  extern struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br, -					       struct sk_buff *skb); +					       struct sk_buff *skb, u16 vid);  extern void br_multicast_add_port(struct net_bridge_port *port);  extern void br_multicast_del_port(struct net_bridge_port *port);  extern void br_multicast_enable_port(struct net_bridge_port *port); @@ -504,7 +504,7 @@ static inline int br_multicast_rcv(struct net_bridge *br,  }  static inline struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br, -						      struct sk_buff *skb) +						      struct sk_buff *skb, u16 vid)  {  	return NULL;  }  |