From 17212cf9965a1a0ec8412b807fe08f74e059cc1c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Witold=20Kr=C4=99cicki?= <wpk@isc.org>
Date: Fri, 7 Sep 2018 09:34:32 +0200
Subject: [PATCH 2711/3677] Align CMSG buffers to a void* boundary, fixes crash
 on architectures with strict alignment CHANGES entry

---
 CHANGES                    | 3 +++
 lib/isc/include/isc/util.h | 5 +++++
 lib/isc/unix/socket.c      | 5 +++--
 3 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/lib/isc/include/isc/util.h b/lib/isc/include/isc/util.h
index bb0c885..acc3d64 100644
--- a/lib/isc/include/isc/util.h
+++ b/lib/isc/include/isc/util.h
@@ -260,6 +260,11 @@ extern void mock_assert(const int result, const char* const expression,
 #define TIME_NOW(tp) 	RUNTIME_CHECK(isc_time_now((tp)) == ISC_R_SUCCESS)
 
 /*%
+ * Alignment
+ */
+#define ALIGN(x, a) (((x) + (a) - 1) & ~((typeof(x))(a)-1))
+
+/*%
  * Misc
  */
 #include <isc/deprecated.h>
diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c
index 343cec2..62a00cd 100644
--- a/lib/isc/unix/socket.c
+++ b/lib/isc/unix/socket.c
@@ -315,8 +315,9 @@ typedef isc_event_t intev_t;
 
 #define CMSG_SP_INT 24
 
-#define RECVCMSGBUFLEN (2*(CMSG_SP_IN6PKT + CMSG_SP_TIMESTAMP + CMSG_SP_TCTOS)+1)
-#define SENDCMSGBUFLEN (2*(CMSG_SP_IN6PKT + CMSG_SP_INT + CMSG_SP_TCTOS)+1)
+/* Align cmsg buffers to be safe on SPARC etc. */
+#define RECVCMSGBUFLEN ALIGN(2*(CMSG_SP_IN6PKT + CMSG_SP_TIMESTAMP + CMSG_SP_TCTOS)+1, sizeof(void*))
+#define SENDCMSGBUFLEN ALIGN(2*(CMSG_SP_IN6PKT + CMSG_SP_INT + CMSG_SP_TCTOS)+1, sizeof(void*))
 
 /*%
  * The number of times a send operation is repeated if the result is EINTR.
-- 
1.8.3.1

