diff options
author | Alexey Khoroshilov <khoroshilov@ispras.ru> | 2016-11-19 01:40:10 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-11-19 18:29:49 +0300 |
commit | 178c7ae944444c198a1d9646477ab10d2d51f03e (patch) | |
tree | 502cbaf24646a93746eb258a7519643acf2b54ba /drivers/net/ethernet/cadence | |
parent | f82ef3e10a870acc19fa04f80ef5877eaa26f41e (diff) | |
download | linux-178c7ae944444c198a1d9646477ab10d2d51f03e.tar.xz |
net: macb: add check for dma mapping error in start_xmit()
at91ether_start_xmit() does not check for dma mapping errors.
Found by Linux Driver Verification project (linuxtesting.org).
Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/cadence')
-rw-r--r-- | drivers/net/ethernet/cadence/macb.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index b32444a3ed79..533653bd7aec 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c @@ -2673,6 +2673,12 @@ static int at91ether_start_xmit(struct sk_buff *skb, struct net_device *dev) lp->skb_length = skb->len; lp->skb_physaddr = dma_map_single(NULL, skb->data, skb->len, DMA_TO_DEVICE); + if (dma_mapping_error(NULL, lp->skb_physaddr)) { + dev_kfree_skb_any(skb); + dev->stats.tx_dropped++; + netdev_err(dev, "%s: DMA mapping error\n", __func__); + return NETDEV_TX_OK; + } /* Set address of the data in the Transmit Address register */ macb_writel(lp, TAR, lp->skb_physaddr); |