A sucessfull call to rte_mp_request_sync does not guarantee that there
are any messages in the buffer, and this should be checked for before
accessing data in the message. Buffer can be empty if IPC is disabled or
if we deciede to ignore replies.

Fixes: c9aa56edec8e ("net/tap: access primary process queues from secondary")
Cc: rasl...@mellanox.com
Cc: sta...@dpdk.org
Signed-off-by: Herakliusz Lipiec <herakliusz.lip...@intel.com>
---
 drivers/net/tap/rte_eth_tap.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c
index e9fda8cf6..7f74b5dc9 100644
--- a/drivers/net/tap/rte_eth_tap.c
+++ b/drivers/net/tap/rte_eth_tap.c
@@ -2101,7 +2101,7 @@ tap_mp_attach_queues(const char *port_name, struct 
rte_eth_dev *dev)
        request.len_param = sizeof(*request_param);
        /* Send request and receive reply */
        ret = rte_mp_request_sync(&request, &replies, &timeout);
-       if (ret < 0) {
+       if (ret < 0 || replies.nb_received != 1) {
                TAP_LOG(ERR, "Failed to request queues from primary: %d",
                        rte_errno);
                return -1;
-- 
2.17.2

Reply via email to