hinic: skb_pad() frees on error
The skb_pad() function frees the skb on error, so this code has a double
free.
Fixes: 00e57a6d4a
("net-next/hinic: Add Tx operation")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
cf4828d166
commit
7d8697afae
@ -192,7 +192,7 @@ netdev_tx_t hinic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
|
|||||||
if (skb->len < MIN_SKB_LEN) {
|
if (skb->len < MIN_SKB_LEN) {
|
||||||
if (skb_pad(skb, MIN_SKB_LEN - skb->len)) {
|
if (skb_pad(skb, MIN_SKB_LEN - skb->len)) {
|
||||||
netdev_err(netdev, "Failed to pad skb\n");
|
netdev_err(netdev, "Failed to pad skb\n");
|
||||||
goto skb_error;
|
goto update_error_stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
skb->len = MIN_SKB_LEN;
|
skb->len = MIN_SKB_LEN;
|
||||||
@ -237,6 +237,7 @@ flush_skbs:
|
|||||||
skb_error:
|
skb_error:
|
||||||
dev_kfree_skb_any(skb);
|
dev_kfree_skb_any(skb);
|
||||||
|
|
||||||
|
update_error_stats:
|
||||||
u64_stats_update_begin(&txq->txq_stats.syncp);
|
u64_stats_update_begin(&txq->txq_stats.syncp);
|
||||||
txq->txq_stats.tx_dropped++;
|
txq->txq_stats.tx_dropped++;
|
||||||
u64_stats_update_end(&txq->txq_stats.syncp);
|
u64_stats_update_end(&txq->txq_stats.syncp);
|
||||||
|
Loading…
Reference in New Issue
Block a user