summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Fainelli <f.fainelli@gmail.com>2016-07-12 16:04:36 -0700
committerDavid S. Miller <davem@davemloft.net>2016-07-12 23:13:01 -0700
commitee6c21b9c11ad96318160f9a504a3fac2114ddca (patch)
tree38710f1472b99bb28a0f62223e59ac826b50ad27
parent386512d18b268c6182903239f9f3390f03ce4c7b (diff)
downloadlinux-ee6c21b9c11ad96318160f9a504a3fac2114ddca.tar.gz
linux-ee6c21b9c11ad96318160f9a504a3fac2114ddca.tar.bz2
linux-ee6c21b9c11ad96318160f9a504a3fac2114ddca.zip
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>
-rw-r--r--drivers/net/ethernet/ethoc.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/ethernet/ethoc.c b/drivers/net/ethernet/ethoc.c
index 06ae14a8e946..4466a1187110 100644
--- a/drivers/net/ethernet/ethoc.c
+++ b/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;
void *dest;
+ if (skb_put_padto(skb, ETHOC_ZLEN)) {
+ dev->stats.tx_errors++;
+ goto out_no_free;
+ }
+
if (unlikely(skb->len > ETHOC_BUFSIZ)) {
dev->stats.tx_errors++;
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);
out:
dev_kfree_skb(skb);
+out_no_free:
return NETDEV_TX_OK;
}