aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/hyperv/netvsc_drv.c
diff options
context:
space:
mode:
authorKY Srinivasan <kys@microsoft.com>2014-09-29 01:16:43 -0400
committerDavid S. Miller <davem@davemloft.net>2014-09-30 01:21:03 -0400
commitdedb845ded56ded1c62f5398a94ffa8615d4592d (patch)
treea3fc51584e3f899bb54a8fef989308ce898f4dd0 /drivers/net/hyperv/netvsc_drv.c
parentc5bb86c3848174aad59ea6cf5748e210fbb8f744 (diff)
hyperv: Fix a bug in netvsc_start_xmit()
After the packet is successfully sent, we should not touch the skb as it may have been freed. This patch is based on the work done by Long Li <longli@microsoft.com>. In this version of the patch I have fixed issues pointed out by David. David, please queue this up for stable. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Tested-by: Long Li <longli@microsoft.com> Tested-by: Sitsofe Wheeler <sitsofe@yahoo.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/hyperv/netvsc_drv.c')
-rw-r--r--drivers/net/hyperv/netvsc_drv.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index a9c5eaadc426..0fcb5e7eb073 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -387,6 +387,7 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
387 int hdr_offset; 387 int hdr_offset;
388 u32 net_trans_info; 388 u32 net_trans_info;
389 u32 hash; 389 u32 hash;
390 u32 skb_length = skb->len;
390 391
391 392
392 /* We will atmost need two pages to describe the rndis 393 /* We will atmost need two pages to describe the rndis
@@ -562,7 +563,7 @@ do_send:
562 563
563drop: 564drop:
564 if (ret == 0) { 565 if (ret == 0) {
565 net->stats.tx_bytes += skb->len; 566 net->stats.tx_bytes += skb_length;
566 net->stats.tx_packets++; 567 net->stats.tx_packets++;
567 } else { 568 } else {
568 kfree(packet); 569 kfree(packet);