e1000: do not release queue on alloc error
If igb_alloc_rx_queue_mbufs() would fail to allocate an mbuf for RX queue, it calls igb_rx_queue_release(rxq). That causes rxq to be silently freed, without updating dev->data->rx_queues[]. So any further reference to it will trigger the SIGSEGV. Same thing in em PMD too. To fix: igb_alloc_rx_queue_mbufs() should just return an error to the caller and let upper layer to deal with the probem. That's what ixgbe PMD is doing right now. Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com> Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
This commit is contained in:
parent
3031749c2d
commit
c6c79fa425
@ -1580,7 +1580,6 @@ em_alloc_rx_queue_mbufs(struct em_rx_queue *rxq)
|
||||
if (mbuf == NULL) {
|
||||
PMD_INIT_LOG(ERR, "RX mbuf alloc failed "
|
||||
"queue_id=%hu\n", rxq->queue_id);
|
||||
em_rx_queue_release(rxq);
|
||||
return (-ENOMEM);
|
||||
}
|
||||
|
||||
|
@ -1818,7 +1818,6 @@ igb_alloc_rx_queue_mbufs(struct igb_rx_queue *rxq)
|
||||
if (mbuf == NULL) {
|
||||
PMD_INIT_LOG(ERR, "RX mbuf alloc failed "
|
||||
"queue_id=%hu\n", rxq->queue_id);
|
||||
igb_rx_queue_release(rxq);
|
||||
return (-ENOMEM);
|
||||
}
|
||||
dma_addr =
|
||||
|
Loading…
x
Reference in New Issue
Block a user