ivshmem: fix crash in corner case
authorSergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
Thu, 18 Jun 2015 12:27:30 +0000 (13:27 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 22 Jun 2015 16:39:40 +0000 (18:39 +0200)
Depending on the configured segments it is possible to hit a
segmentation fault as a result of decrementing an unsigned index with
value 0.

To avoid it, exit the loop if the index has value 0.

Fixes: 40b966a211ab ("ivshmem: library changes for mmaping using ivshmem")

Signed-off-by: Sergio Gonzalez Monroy <sergio.gonzalez.monroy@intel.com>
lib/librte_ivshmem/rte_ivshmem.c

index 7ca55ed..9621906 100644 (file)
@@ -377,6 +377,8 @@ build_config(struct rte_ivshmem_metadata * metadata)
                        for (j = biggest_idx - 1; j >= i; j--) {
                                memcpy(&pages[j+1], &pages[j], sizeof(struct rte_memseg));
                                memset(&pages[j], 0, sizeof(struct rte_memseg));
+                               if (j == 0)
+                                       break;
                        }
 
                        /* put old biggest segment to its new place */