mlx4: fix possible crash on scattered mbuf allocation failure
authorAdrien Mazarguil <adrien.mazarguil@6wind.com>
Tue, 30 Jun 2015 09:27:47 +0000 (11:27 +0200)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 1 Jul 2015 08:17:31 +0000 (10:17 +0200)
When failing to allocate a segment, mlx4_rx_burst_sp() may call
rte_pktmbuf_free() on an incomplete scattered mbuf whose next pointer
in the last segment is not set.

Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
drivers/net/mlx4/mlx4.c

index 5391b7a..d1166b2 100644 (file)
@@ -2370,8 +2370,10 @@ mlx4_rx_burst_sp(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
                                DEBUG("rxq=%p, wr_id=%" PRIu64 ":"
                                      " can't allocate a new mbuf",
                                      (void *)rxq, wr_id);
-                               if (pkt_buf != NULL)
+                               if (pkt_buf != NULL) {
+                                       *pkt_buf_next = NULL;
                                        rte_pktmbuf_free(pkt_buf);
+                               }
                                /* Increase out of memory counters. */
                                ++rxq->stats.rx_nombuf;
                                ++rxq->priv->dev->data->rx_mbuf_alloc_failed;