diff options
author | Eric Dumazet <edumazet@google.com> | 2013-02-05 20:22:20 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-02-06 15:59:47 -0500 |
commit | 6d1ccff627806829c46091bd9d9835302a3fbf5f (patch) | |
tree | 1caa7940d18321caa3973396ccd272230ddef604 /net/core/dev.c | |
parent | 12b0004d1d1e2a9aa667412d479041e403bcafae (diff) | |
download | lwn-6d1ccff627806829c46091bd9d9835302a3fbf5f.tar.gz lwn-6d1ccff627806829c46091bd9d9835302a3fbf5f.zip |
net: reset mac header in dev_start_xmit()
On 64 bit arches :
There is a off-by-one error in qdisc_pkt_len_init() because
mac_header is not set in xmit path.
skb_mac_header() returns an out of bound value that was
harmless because hdr_len is an 'unsigned int'
On 32bit arches, the error is abysmal.
This patch is also a prereq for "macvlan: add multicast filter"
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Ben Greear <greearb@candelatech.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 65da698c500b..2f31bf97ba65 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2835,6 +2835,8 @@ int dev_queue_xmit(struct sk_buff *skb) struct Qdisc *q; int rc = -ENOMEM; + skb_reset_mac_header(skb); + /* Disable soft irqs for various locks below. Also * stops preemption for RCU. */ |