Bug 278 - bond_ethdev_rx_burst multithread access bond's different queue will crash
Summary: bond_ethdev_rx_burst multithread access bond's different queue will crash
Status: CONFIRMED
Alias: None
Product: DPDK
Classification: Unclassified
Component: ethdev (show other bugs)
Version: 18.11
Hardware: x86 Linux
: High critical
Target Milestone: 18.11
Assignee: Chas Williams
URL:
Depends on:
Blocks:
 
Reported: 2019-05-15 08:18 CEST by JIMI
Modified: 2019-05-15 22:59 CEST (History)
1 user (show)



Attachments

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

Note You need to log in before you can comment on or make changes to this bug.