|
|
- commit 7e751a3c24a7021075fb298025c4a1ce98a5b049
- Author: Olivier Houchard <cognet@ci0.org>
- Date: Sun Oct 21 01:33:11 2018 +0200
-
- BUG/MEDIUM: pools: Fix the usage of mmap()) with DEBUG_UAF.
-
- When mapping memory with mmap(), we should use a fd of -1, not 0. 0 may
- work on linux, but it doesn't work on FreeBSD, and probably other OSes.
-
- It would be nice to backport this to 1.8 to help debugging there.
-
- (cherry picked from commit 62975a7740cba4bdaf1c096dd246feba854d2410)
- Signed-off-by: Willy Tarreau <w@1wt.eu>
-
- diff --git a/include/common/memory.h b/include/common/memory.h
- index a2237da5..da0641de 100644
- --- a/include/common/memory.h
- +++ b/include/common/memory.h
- @@ -186,12 +186,13 @@ static inline void pool_free_area(void *area, size_t __maybe_unused size)
- * some padding is added, the area's start address is copied at the end of the
- * padding to help detect underflows.
- */
- +#include <errno.h>
- static inline void *pool_alloc_area(size_t size)
- {
- size_t pad = (4096 - size) & 0xFF0;
- void *ret;
-
- - ret = mmap(NULL, (size + 4095) & -4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
- + ret = mmap(NULL, (size + 4095) & -4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
- if (ret == MAP_FAILED)
- return NULL;
- if (pad >= sizeof(void *))
|