From 183f9e2a1b4d56fdf0035337f0665880c4ef0812 Mon Sep 17 00:00:00 2001
From: "Dmitry V. Levin" <ldv@altlinux.org>
Date: Thu, 6 Aug 2020 08:00:00 +0000
Subject: Fix -Wcast-align compilation warnings on arm

Apparently, gcc is also not smart enough to infer the alignment
of structure fields, for details see
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89133

Use unions to avoid these casts altogether, this fixes compilation
warnings reported by gcc on arm, e.g.:

md5.c: In function 'MD5Update':
md5.c:92:35: error: cast increases required alignment of target type [-Werror=cast-align]
   92 |   MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
      |                                   ^
md5.c:101:35: error: cast increases required alignment of target type [-Werror=cast-align]
  101 |   MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
      |                                   ^
md5.c: In function 'MD5Final':
md5.c:136:35: error: cast increases required alignment of target type [-Werror=cast-align]
  136 |   MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
      |                                   ^
md5.c:147:9: error: cast increases required alignment of target type [-Werror=cast-align]
  147 |  memcpy((uint32 *)ctx->in + 14, ctx->bits, 2*sizeof(uint32));
      |         ^
md5.c:149:34: error: cast increases required alignment of target type [-Werror=cast-align]
  149 |  MD5Name(MD5Transform)(ctx->buf, (uint32 *) ctx->in);
      |                                  ^

* modules/pam_namespace/md5.h (struct MD5Context): Replace "buf" and
"in" fields with unions.  All users updated.
* modules/pam_unix/md5.h (struct MD5Context): Likewise.
* modules/pam_timestamp/sha1.h (struct sha1_context.pending): Replace
with a union.  All users updated.

Complements: v1.4.0~195 ("Fix most of clang -Wcast-align compilation warnings")
---
 modules/pam_namespace/md5.h | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

(limited to 'modules/pam_namespace/md5.h')

diff --git a/modules/pam_namespace/md5.h b/modules/pam_namespace/md5.h
index bded3302..501aab4b 100644
--- a/modules/pam_namespace/md5.h
+++ b/modules/pam_namespace/md5.h
@@ -7,9 +7,15 @@
 typedef unsigned int uint32;
 
 struct MD5Context {
-	uint32 buf[4];
+	union {
+		uint32 i[4];
+		unsigned char c[16] PAM_ATTRIBUTE_ALIGNED(4);
+	} buf;
 	uint32 bits[2];
-	unsigned char in[64] PAM_ATTRIBUTE_ALIGNED(4);
+	union {
+		uint32 i[16];
+		unsigned char c[64] PAM_ATTRIBUTE_ALIGNED(4);
+	} in;
 };
 
 #define MD5_DIGEST_LENGTH 16
-- 
cgit v1.2.3