diff options
| author | Patrick McHardy <kaber@trash.net> | 2009-06-12 06:14:36 +0000 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-06-13 01:18:45 -0700 | 
| commit | 5b2c4b972c0226406361f83b747eb5cdab51e68e (patch) | |
| tree | b915055947fc6646af3477b135be4ad76ec4ba32 | |
| parent | 81fbbf60408ad6b98ff72120de948cb7fd2498d0 (diff) | |
| download | olio-linux-3.10-5b2c4b972c0226406361f83b747eb5cdab51e68e.tar.xz olio-linux-3.10-5b2c4b972c0226406361f83b747eb5cdab51e68e.zip  | |
net: fix network drivers ndo_start_xmit() return values (part 8)
Fix up USB drivers that return an errno value (result of usb_submit_urb())
to qdisc_restart(), causing qdisc_restart() to print a warning and requeue/
retransmit the skb.
- hso: skb is freed: use after free
- at76_usb: skb is freed: use after free
Compile tested only.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/usb/hso.c | 2 | ||||
| -rw-r--r-- | drivers/staging/at76_usb/at76_usb.c | 7 | 
2 files changed, 4 insertions, 5 deletions
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c index e3580f42c89..f8c6d7ea726 100644 --- a/drivers/net/usb/hso.c +++ b/drivers/net/usb/hso.c @@ -816,7 +816,7 @@ static int hso_net_start_xmit(struct sk_buff *skb, struct net_device *net)  	}  	dev_kfree_skb(skb);  	/* we're done */ -	return result; +	return NETDEV_TX_OK;  }  static void hso_get_drvinfo(struct net_device *net, struct ethtool_drvinfo *info) diff --git a/drivers/staging/at76_usb/at76_usb.c b/drivers/staging/at76_usb/at76_usb.c index c8af9a868d6..3f303ae97b4 100644 --- a/drivers/staging/at76_usb/at76_usb.c +++ b/drivers/staging/at76_usb/at76_usb.c @@ -3242,12 +3242,11 @@ static int at76_tx(struct sk_buff *skb, struct net_device *netdev)  			       "%s: -EINVAL: tx urb %p hcpriv %p complete %p\n",  			       priv->netdev->name, priv->tx_urb,  			       priv->tx_urb->hcpriv, priv->tx_urb->complete); -	} else { +	} else  		stats->tx_bytes += skb->len; -		dev_kfree_skb(skb); -	} -	return ret; +	dev_kfree_skb(skb); +	return NETDEV_TX_OK;  }  static void at76_tx_timeout(struct net_device *netdev)  |