net/tap: fix multi process reply buffer
authorHerakliusz Lipiec <herakliusz.lipiec@intel.com>
Fri, 19 Apr 2019 10:28:52 +0000 (11:28 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 19 Apr 2019 17:34:01 +0000 (19:34 +0200)
A successful 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 decide to ignore replies.

Fixes: c9aa56edec8e ("net/tap: access primary process queues from secondary")
Cc: stable@dpdk.org
Signed-off-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
drivers/net/tap/rte_eth_tap.c

index e9fda8c..7f74b5d 100644 (file)
@@ -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;