diff options
Diffstat (limited to 'net/bridge/br_input.c')
-rw-r--r-- | net/bridge/br_input.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c index 013f2290bfa5..7637f58c1226 100644 --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c | |||
@@ -131,11 +131,11 @@ static void br_do_proxy_arp(struct sk_buff *skb, struct net_bridge *br, | |||
131 | int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb) | 131 | int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb) |
132 | { | 132 | { |
133 | struct net_bridge_port *p = br_port_get_rcu(skb->dev); | 133 | struct net_bridge_port *p = br_port_get_rcu(skb->dev); |
134 | const unsigned char *dest = eth_hdr(skb)->h_dest; | ||
135 | enum br_pkt_type pkt_type = BR_PKT_UNICAST; | 134 | enum br_pkt_type pkt_type = BR_PKT_UNICAST; |
136 | struct net_bridge_fdb_entry *dst = NULL; | 135 | struct net_bridge_fdb_entry *dst = NULL; |
137 | struct net_bridge_mdb_entry *mdst; | 136 | struct net_bridge_mdb_entry *mdst; |
138 | bool local_rcv, mcast_hit = false; | 137 | bool local_rcv, mcast_hit = false; |
138 | const unsigned char *dest; | ||
139 | struct net_bridge *br; | 139 | struct net_bridge *br; |
140 | u16 vid = 0; | 140 | u16 vid = 0; |
141 | 141 | ||
@@ -153,6 +153,7 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb | |||
153 | br_fdb_update(br, p, eth_hdr(skb)->h_source, vid, false); | 153 | br_fdb_update(br, p, eth_hdr(skb)->h_source, vid, false); |
154 | 154 | ||
155 | local_rcv = !!(br->dev->flags & IFF_PROMISC); | 155 | local_rcv = !!(br->dev->flags & IFF_PROMISC); |
156 | dest = eth_hdr(skb)->h_dest; | ||
156 | if (is_multicast_ether_addr(dest)) { | 157 | if (is_multicast_ether_addr(dest)) { |
157 | /* by definition the broadcast is also a multicast address */ | 158 | /* by definition the broadcast is also a multicast address */ |
158 | if (is_broadcast_ether_addr(dest)) { | 159 | if (is_broadcast_ether_addr(dest)) { |