From f2dd5e4159bd055030cce6c6f4fe7f8988a74e2c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 29 Oct 2015 10:42:55 +0100 Subject: [PATCH] BUG/MEDIUM: config: count memory limits on 64 bits, not 32 It was accidently discovered that limiting haproxy to 5000 MB leads to an effective limit of 904 MB. This is because the computation for the size limit is performed by multiplying rlimit_memmax by 1048576, and doing so causes the operation to be performed on an int instead of a long or long long. Just switch to 1048576ULL as is done at other places to fix this. This bug affects all supported versions, the backport is desired, though it rarely affects users since few people apply memory limits. --- src/haproxy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/haproxy.c b/src/haproxy.c index 3b0d14df6..93423a9b0 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -1642,7 +1642,7 @@ int main(int argc, char **argv) if (global.rlimit_memmax) { limit.rlim_cur = limit.rlim_max = - global.rlimit_memmax * 1048576 / global.nbproc; + global.rlimit_memmax * 1048576ULL / global.nbproc; #ifdef RLIMIT_AS if (setrlimit(RLIMIT_AS, &limit) == -1) { Warning("[%s.main()] Cannot fix MEM limit to %d megs.\n",