[dpdk-dev] memalloc: fix potential underflow on mem size calculation

Message ID 6b44bd0289f777e181eb4007005ad3b466beafde.1525352308.git.anatoly.burakov@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Anatoly Burakov May 3, 2018, 1:03 p.m. UTC
  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")
Cc: anatoly.burakov@intel.com

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 lib/librte_eal/common/eal_common_memory.c | 3 +++
 1 file changed, 3 insertions(+)
  

Comments

Thomas Monjalon May 14, 2018, 12:14 a.m. UTC | #1
03/05/2018 15:03, Anatoly Burakov:
> 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")
> Cc: anatoly.burakov@intel.com
> 
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>

Applied, thanks
  

Patch

diff --git a/lib/librte_eal/common/eal_common_memory.c b/lib/librte_eal/common/eal_common_memory.c
index 4c943b0..a1e07d8 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
@@ -429,6 +429,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;