mem: fix potential underflow on mem size calculation
authorAnatoly Burakov <anatoly.burakov@intel.com>
Thu, 3 May 2018 13:03:19 +0000 (14:03 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Mon, 14 May 2018 01:15:31 +0000 (03:15 +0200)
If total memory is already bigger than max memory, an underflow
will occur on subtraction. Fix it by simply stopping whenever
we already have amount of memory that is bigger than maximum.

Fixes: 66cc45e293ed ("mem: replace memseg with memseg lists")

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
lib/librte_eal/common/eal_common_memory.c

index 4f13b58..4f0688f 100644 (file)
@@ -458,6 +458,9 @@ memseg_primary_init(void)
                                break;
 #endif
 
+                       if (total_mem >= max_mem)
+                               break;
+
                        max_type_mem = RTE_MIN(max_mem - total_mem,
                                (uint64_t)RTE_MAX_MEM_MB_PER_TYPE << 20);
                        max_segs = RTE_MAX_MEMSEG_PER_TYPE;