瀏覽代碼

net: ethoc: Correctly pad short packets

Even though the hardware can be doing zero padding, we want the SKB to
be going out on the wire with the appropriate size. This fixes packet
truncations observed with e.g: ARP packets.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Florian Fainelli 9 年之前
父節點
當前提交
ee6c21b9c1
共有 1 個文件被更改,包括 6 次插入0 次删除
  1. 6 0
      drivers/net/ethernet/ethoc.c

+ 6 - 0
drivers/net/ethernet/ethoc.c

@@ -860,6 +860,11 @@ static netdev_tx_t ethoc_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	unsigned int entry;
 	unsigned int entry;
 	void *dest;
 	void *dest;
 
 
+	if (skb_put_padto(skb, ETHOC_ZLEN)) {
+		dev->stats.tx_errors++;
+		goto out_no_free;
+	}
+
 	if (unlikely(skb->len > ETHOC_BUFSIZ)) {
 	if (unlikely(skb->len > ETHOC_BUFSIZ)) {
 		dev->stats.tx_errors++;
 		dev->stats.tx_errors++;
 		goto out;
 		goto out;
@@ -894,6 +899,7 @@ static netdev_tx_t ethoc_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	skb_tx_timestamp(skb);
 	skb_tx_timestamp(skb);
 out:
 out:
 	dev_kfree_skb(skb);
 	dev_kfree_skb(skb);
+out_no_free:
 	return NETDEV_TX_OK;
 	return NETDEV_TX_OK;
 }
 }