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.

(cherry picked from commit a7ddab0c250a0618e14a0c86aa66bbcf2052b2dc)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit c491c70773da359b5134d23a6fa8c9a5bd746145)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/shctx.c b/src/shctx.c
index fe1b74a..ae9cc1f 100644
--- a/src/shctx.c
+++ b/src/shctx.c
@@ -308,6 +308,10 @@
 	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;