mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-18 00:24:58 +08:00
net: cavium: liquidio: Avoid dma_unmap_single on uninitialized ndata
The label lio_xmit_failed is used 3 times through liquidio_xmit() but it
always makes a call to dma_unmap_single() using potentially
uninitialized variables from "ndata" variable. Out of the 3 gotos, 2 run
after ndata has been initialized, and had a prior dma_map_single() call.
Fix this by adding a new error label: lio_xmit_dma_failed which does
this dma_unmap_single() and then processed with the lio_xmit_failed
fallthrough.
Fixes: f21fb3ed36
("Add support of Cavium Liquidio ethernet adapters")
Reported-by: coverity (CID 1309740)
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ea6ff112b0
commit
8e6ce7ebeb
@ -2821,7 +2821,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
if (!g) {
|
||||
netif_info(lio, tx_err, lio->netdev,
|
||||
"Transmit scatter gather: glist null!\n");
|
||||
goto lio_xmit_failed;
|
||||
goto lio_xmit_dma_failed;
|
||||
}
|
||||
|
||||
cmdsetup.s.gather = 1;
|
||||
@ -2892,7 +2892,7 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
else
|
||||
status = octnet_send_nic_data_pkt(oct, &ndata, xmit_more);
|
||||
if (status == IQ_SEND_FAILED)
|
||||
goto lio_xmit_failed;
|
||||
goto lio_xmit_dma_failed;
|
||||
|
||||
netif_info(lio, tx_queued, lio->netdev, "Transmit queued successfully\n");
|
||||
|
||||
@ -2906,12 +2906,13 @@ static int liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
lio_xmit_dma_failed:
|
||||
dma_unmap_single(&oct->pci_dev->dev, ndata.cmd.dptr,
|
||||
ndata.datasize, DMA_TO_DEVICE);
|
||||
lio_xmit_failed:
|
||||
stats->tx_dropped++;
|
||||
netif_info(lio, tx_err, lio->netdev, "IQ%d Transmit dropped:%llu\n",
|
||||
iq_no, stats->tx_dropped);
|
||||
dma_unmap_single(&oct->pci_dev->dev, ndata.cmd.dptr,
|
||||
ndata.datasize, DMA_TO_DEVICE);
|
||||
recv_buffer_free(skb);
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user