net/af_packet: fix fd use after free

When using the same file descriptor for both rx and tx, the
eth_dev_stop function would close the same fd twice.   This
change prevents that from happening.

Fixes: 364e08f2bbc0 ("af_packet: add PMD for AF_PACKET-based virtual devices")

Signed-off-by: Timmons C. Player <timmons.player@spirent.com>
Acked-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
Timmons C. Player 2017-01-05 09:33:35 -05:00 committed by Ferruh Yigit
parent 1f4a84672e
commit 5d16a43c40

View File

@ -267,9 +267,16 @@ eth_dev_stop(struct rte_eth_dev *dev)
sockfd = internals->rx_queue[i].sockfd;
if (sockfd != -1)
close(sockfd);
sockfd = internals->tx_queue[i].sockfd;
if (sockfd != -1)
close(sockfd);
/* Prevent use after free in case tx fd == rx fd */
if (sockfd != internals->tx_queue[i].sockfd) {
sockfd = internals->tx_queue[i].sockfd;
if (sockfd != -1)
close(sockfd);
}
internals->rx_queue[i].sockfd = -1;
internals->tx_queue[i].sockfd = -1;
}
dev->data->dev_link.link_status = ETH_LINK_DOWN;