From a7ddab0c250a0618e14a0c86aa66bbcf2052b2dc Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 21 Feb 2020 13:45:58 +0100 Subject: [PATCH] BUG/MEDIUM: shctx: make sure to keep all blocks aligned The blocksize and the extra field are not necessarily aligned on a machine word. This can result in crashing an align-sensitive machine when initializing the shctx area. Let's round both sizes up to a pointer size to make this safe everywhere. This fixes issue #512. This should be backported as far as 1.8. --- src/shctx.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/shctx.c b/src/shctx.c index fe1b74a7e..ae9cc1f1b 100644 --- a/src/shctx.c +++ b/src/shctx.c @@ -308,6 +308,10 @@ int shctx_init(struct shared_context **orig_shctx, int maxblocks, int blocksize, if (maxblocks <= 0) return 0; + /* make sure to align the records on a pointer size */ + blocksize = (blocksize + sizeof(void *) - 1) & -sizeof(void *); + extra = (extra + sizeof(void *) - 1) & -sizeof(void *); + #ifndef USE_PRIVATE_CACHE if (shared) maptype = MAP_SHARED;