<div dir="ltr">Hello,<br><br>I have recently stumbled into an issue with my DPDK-based application running the failsafe pmd. This pmd uses a tap device, with which my application fails to start if more than 8 rx queues are used. This issue appears to be related to this patch:<br><a href="https://git.dpdk.org/dpdk/commit/?id=c36ce7099c2187926cd62cff7ebd479823554929">https://git.dpdk.org/dpdk/commit/?id=c36ce7099c2187926cd62cff7ebd479823554929</a><br><br>I have seen in the documentation that there was a limitation to 8 max queues shared when using a tap device shared between multiple processes. However, my application uses a single primary process, with no secondary process, but it appears that I am still running into this limitation.<br><br>Now if we look at this small chunk of code:<br><br>   memset(&msg, 0, sizeof(msg));<br>     strlcpy(<a href="http://msg.name">msg.name</a>, TAP_MP_REQ_START_RXTX, sizeof(<a href="http://msg.name">msg.name</a>));<br>   strlcpy(request_param->port_name, dev->data->name, sizeof(request_param->port_name));<br>     msg.len_param = sizeof(*request_param);<br>       for (i = 0; i < dev->data->nb_tx_queues; i++) {<br>    msg.fds[fd_iterator++] = process_private->txq_fds[i];<br>    msg.num_fds++;<br>    request_param->txq_count++;<br>       }<br>     for (i = 0; i < dev->data->nb_rx_queues; i++) {<br>    msg.fds[fd_iterator++] = process_private->rxq_fds[i];<br>    msg.num_fds++;<br>    request_param->rxq_count++;<br>       }<br>(Note that I am not using the latest DPDK version, but stable v23.11.1. But I believe the issue is still present on latest.)<br><br>There are no checks on the maximum value i can take in the for loops. Since the size of msg.fds is limited by the maximum of 8 queues shared between process because of the IPC API, there is a potential buffer overflow which can happen here.<br><br>See the struct declaration:<br>    struct rte_mp_msg {<br>     char name[RTE_MP_MAX_NAME_LEN];<br>     int len_param;<br>     int num_fds;<br>     uint8_t param[RTE_MP_MAX_PARAM_LEN];<br>     int fds[RTE_MP_MAX_FD_NUM];<br>    };<br><br>This means that if the number of queues used is more than 8, the program will crash. This is what happens on my end as I get the following log:<br>*** stack smashing detected ***: terminated<br><br>Reverting the commit mentionned above fixes my issue. Also setting a check like this works for me:<br><br>    if (dev->data->nb_tx_queues + dev->data->nb_rx_queues > RTE_MP_MAX_FD_NUM)<br>     return -1;<br><br>I've made the changes on my local branch to fix my issue. This mail is just to bring attention on this problem.<br>Thank you in advance for considering it.<br><br>Regards,<br>Edwin Brossette.<br><br><br></div>