bind/2711-Align-CMSG-buffers-to-a-void-boundary-fixes-crash-on.patch

48 lines
1.6 KiB
Diff
Raw Normal View History

2019-12-28 09:41:34 +08:00
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