mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-12 00:38:55 +00:00
net: hns: fix KASAN: use-after-free in hns_nic_net_xmit_hw()
This patch is trying to fix the issue due to: [27237.844750] BUG: KASAN: use-after-free in hns_nic_net_xmit_hw+0x708/0xa18[hns_enet_drv] After hnae_queue_xmit() in hns_nic_net_xmit_hw(), can be interrupted by interruptions, and than call hns_nic_tx_poll_one() to handle the new packets, and free the skb. So, when turn back to hns_nic_net_xmit_hw(), calling skb->len will cause use-after-free. This patch update tx ring statistics in hns_nic_tx_poll_one() to fix the bug. Signed-off-by: Liubin Shu <shuliubin@huawei.com> Signed-off-by: Zhen Lei <thunder.leizhen@huawei.com> Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> Signed-off-by: Peng Li <lipeng321@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ef0efcd3bd
commit
3a39a12ad3
@ -376,8 +376,6 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev,
|
||||
wmb(); /* commit all data before submit */
|
||||
assert(skb->queue_mapping < priv->ae_handle->q_num);
|
||||
hnae_queue_xmit(priv->ae_handle->qs[skb->queue_mapping], buf_num);
|
||||
ring->stats.tx_pkts++;
|
||||
ring->stats.tx_bytes += skb->len;
|
||||
|
||||
return NETDEV_TX_OK;
|
||||
|
||||
@ -999,6 +997,9 @@ static int hns_nic_tx_poll_one(struct hns_nic_ring_data *ring_data,
|
||||
/* issue prefetch for next Tx descriptor */
|
||||
prefetch(&ring->desc_cb[ring->next_to_clean]);
|
||||
}
|
||||
/* update tx ring statistics. */
|
||||
ring->stats.tx_pkts += pkts;
|
||||
ring->stats.tx_bytes += bytes;
|
||||
|
||||
NETIF_TX_UNLOCK(ring);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user