staging: fsl-dpaa2/eth: Fix skb use after free
authorBogdan Purcareata <bogdan.purcareata@nxp.com>
Thu, 20 Jul 2017 10:58:37 +0000 (10:58 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 30 Jul 2017 15:25:03 +0000 (08:25 -0700)
Once a Tx frame descriptor is enqueued, an interrupt might be triggered
to process the Tx confirmation and free the skb, hitting a memory use
after free when updating the tx_bytes statistic based on skb->len.

Use the frame descriptor length instead.

Signed-off-by: Bogdan Purcareata <bogdan.purcareata@nxp.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/fsl-dpaa2/ethernet/dpaa2-eth.c

index b9a0a31..0f3e497 100644 (file)
@@ -616,7 +616,7 @@ static netdev_tx_t dpaa2_eth_tx(struct sk_buff *skb, struct net_device *net_dev)
                free_tx_fd(priv, &fd, NULL);
        } else {
                percpu_stats->tx_packets++;
-               percpu_stats->tx_bytes += skb->len;
+               percpu_stats->tx_bytes += dpaa2_fd_get_len(&fd);
        }
 
        return NETDEV_TX_OK;