summaryrefslogtreecommitdiff
path: root/modules/pam_timestamp/sha1.c
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2020-08-06 08:00:00 +0000
committerDmitry V. Levin <ldv@altlinux.org>2020-08-06 08:00:00 +0000
commit183f9e2a1b4d56fdf0035337f0665880c4ef0812 (patch)
tree04d021f8066db0d1b6eaee514d41967cae9fc9c2 /modules/pam_timestamp/sha1.c
parent647c930c0ce4ef8e316eb4bb9f942a9c36739b8e (diff)
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")
Diffstat (limited to 'modules/pam_timestamp/sha1.c')
-rw-r--r--modules/pam_timestamp/sha1.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/modules/pam_timestamp/sha1.c b/modules/pam_timestamp/sha1.c
index af3ccb97..d713aed1 100644
--- a/modules/pam_timestamp/sha1.c
+++ b/modules/pam_timestamp/sha1.c
@@ -156,8 +156,8 @@ sha1_update(struct sha1_context *ctx, const unsigned char *data, size_t length)
while (l + ctx->pending_count >= SHA1_BLOCK_SIZE) {
c = ctx->pending_count;
t = SHA1_BLOCK_SIZE - c;
- memcpy(ctx->pending + c, &data[i], t);
- sha1_process(ctx, (uint32_t*) ctx->pending);
+ memcpy(ctx->pending.c + c, &data[i], t);
+ sha1_process(ctx, ctx->pending.i);
i += t;
l -= t;
ctx->pending_count = 0;
@@ -165,7 +165,7 @@ sha1_update(struct sha1_context *ctx, const unsigned char *data, size_t length)
/* Save what's left of the data block as a pending data block. */
c = ctx->pending_count;
- memcpy(ctx->pending + c, &data[i], l);
+ memcpy(ctx->pending.c + c, &data[i], l);
ctx->pending_count += l;
/* Update the message length. */
@@ -193,18 +193,17 @@ sha1_output(struct sha1_context *ctx, unsigned char *out)
/* Pad this block. */
c = ctx2.pending_count;
- memcpy(ctx2.pending + c,
+ memcpy(ctx2.pending.c + c,
padding, SHA1_BLOCK_SIZE - c);
/* Do we need to process two blocks now? */
if (c >= (SHA1_BLOCK_SIZE - (sizeof(uint32_t) * 2))) {
/* Process this block. */
- sha1_process(&ctx2,
- (uint32_t*) ctx2.pending);
+ sha1_process(&ctx2, ctx2.pending.i);
/* Set up another block. */
ctx2.pending_count = 0;
- memset(ctx2.pending, 0, SHA1_BLOCK_SIZE);
- ctx2.pending[0] =
+ memset(ctx2.pending.c, 0, SHA1_BLOCK_SIZE);
+ ctx2.pending.c[0] =
(c == SHA1_BLOCK_SIZE) ? 0x80 : 0;
}
@@ -217,11 +216,11 @@ sha1_output(struct sha1_context *ctx, unsigned char *out)
ctx2.counts[0] <<= 3;
ctx2.counts[0] = htonl(ctx2.counts[0]);
ctx2.counts[1] = htonl(ctx2.counts[1]);
- memcpy(ctx2.pending + 56,
+ memcpy(ctx2.pending.c + 56,
&ctx2.counts[1], sizeof(uint32_t));
- memcpy(ctx2.pending + 60,
+ memcpy(ctx2.pending.c + 60,
&ctx2.counts[0], sizeof(uint32_t));
- sha1_process(&ctx2, (uint32_t*) ctx2.pending);
+ sha1_process(&ctx2, ctx2.pending.i);
/* Output the data. */
out[ 3] = (ctx2.a >> 0) & 0xff;