Bug 278

Summary: bond_ethdev_rx_burst multithread access bond's different queue will crash
Product: DPDK Reporter: JIMI (wavespider)
Component: ethdevAssignee: Chas Williams (3chas3)
Status: CONFIRMED ---    
Severity: critical CC: ajit.khaparde
Priority: High    
Version: 18.11   
Target Milestone: 18.11   
Hardware: x86   
OS: Linux   

Description JIMI 2019-05-15 08:18:30 CEST
when multi-thread access net-bonding interface's different queue, calling function 
 below will result in crash because of "out of array boundary":
rte_eth_rx_burst
  -> bond_ethdev_rx_burst

one thread loop over and update internals->active_slave:
if (++internals->active_slave >= slave_count) 
	internals->active_slave = 0;
another thread just read internals->active_slave, maybe equal slave_count:

active_slave = internals->active_slave;
num_rx_slave =
	rte_eth_rx_burst(internals->active_slaves[active_slave], /*Here out of boundary*/
		 bd_rx_q->queue_id,
		 bufs + num_rx_total, nb_pkts);

default, internals->active_slaves[active_slave] maybe the value is 0, then call rte_eth_rx_burst function:

port-id == 0 and queue_id = 20 (example):
when port-id == 0's interface have not enough queue-number(<20), then will result in crash ( dev->data->rx_queues[queue_id] == NULL pointer access ).
Comment 1 Ajit Khaparde 2019-05-15 22:59:15 CEST
Can you please take a look at this? Thanks