From 12c8afc3f21791812081afb4e287bb76d5150b8b Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Thu, 17 Oct 2019 00:49:54 +0300 Subject: [PATCH] lib/memory: properly handle int overflow in sysTotalMemory This should fix builds on 32-bit architectures such as arm. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/212 --- lib/memory/memory_linux.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/memory/memory_linux.go b/lib/memory/memory_linux.go index 4c913cba14..6529712f8e 100644 --- a/lib/memory/memory_linux.go +++ b/lib/memory/memory_linux.go @@ -9,12 +9,17 @@ import ( "github.com/VictoriaMetrics/VictoriaMetrics/lib/logger" ) +const maxInt = int(^uint(0) >> 1) + func sysTotalMemory() int { var si syscall.Sysinfo_t if err := syscall.Sysinfo(&si); err != nil { logger.Panicf("FATAL: error in syscall.Sysinfo: %s", err) } - totalMem := int(si.Totalram) * int(si.Unit) + totalMem := maxInt + if uint64(maxInt)/uint64(si.Totalram) > uint64(si.Unit) { + totalMem = int(uint64(si.Totalram) * uint64(si.Unit)) + } // Try determining the amount of memory inside docker container. // See https://stackoverflow.com/questions/42187085/check-mem-limit-within-a-docker-container .