diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 1ff676caa9cd06282bf163be5e3c07a84a333b45..a2c4e8d4a9559fbdfa7806d9cbcceb76d7a29975 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -2977,11 +2977,11 @@ static struct notifier_block bond_netdev_notifier = { /* L2 hash helper */ static inline u32 bond_eth_hash(struct sk_buff *skb) { - struct ethhdr *data = (struct ethhdr *)skb->data; - - if (skb_headlen(skb) >= offsetof(struct ethhdr, h_proto)) - return data->h_dest[5] ^ data->h_source[5]; + struct ethhdr *ep, hdr_tmp; + ep = skb_header_pointer(skb, 0, sizeof(hdr_tmp), &hdr_tmp); + if (ep) + return ep->h_dest[5] ^ ep->h_source[5] ^ ep->h_proto; return 0; }