[PATCH 1/3] cipher/sha512: fix 'accessing 64 bytes in a region of size 8' warnings

Jussi Kivilinna jussi.kivilinna at iki.fi
Mon Oct 25 20:02:12 CEST 2021


* cipher/sha512.c (SHA512_STATESHA256_CONTEXT): Replace h0-h7 with h[8].
(do_sha512_transform_i386_ssse3, do_sha512_transform_ppc8)
(do_sha512_transform_ppc9, do_sha512_transform_s390x)
(do_sha512_final_s390x, sha512_init, sha384_init, sha512_256_init)
(sha512_224_init, do_transform_generic, sha512_final): Convert use
of h0-h7 to h[0]-h[7].
--

GCC-11 gives following warning on sha512.c:
 warning: 'func' accessing 64 bytes in a region of size 8

Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
 cipher/sha512.c | 118 ++++++++++++++++++++++++------------------------
 1 file changed, 59 insertions(+), 59 deletions(-)

diff --git a/cipher/sha512.c b/cipher/sha512.c
index 45291567..2d4f58e0 100644
--- a/cipher/sha512.c
+++ b/cipher/sha512.c
@@ -134,7 +134,7 @@
 
 typedef struct
 {
-  u64 h0, h1, h2, h3, h4, h5, h6, h7;
+  u64 h[8];
 } SHA512_STATE;
 
 typedef struct
@@ -142,7 +142,7 @@ typedef struct
   gcry_md_block_ctx_t bctx;
   SHA512_STATE state;
 #ifdef USE_S390X_CRYPTO
-  u64 final_len_msb, final_len_lsb; /* needs to be right after state.h7. */
+  u64 final_len_msb, final_len_lsb; /* needs to be right after state.h[7]. */
   int use_s390x_crypto;
 #endif
 } SHA512_CONTEXT;
@@ -277,7 +277,7 @@ do_sha512_transform_i386_ssse3(void *ctx, const unsigned char *data,
 			       size_t nblks)
 {
   SHA512_CONTEXT *hd = ctx;
-  return _gcry_sha512_transform_i386_ssse3 (&hd->state.h0, data, nblks);
+  return _gcry_sha512_transform_i386_ssse3 (hd->state.h, data, nblks);
 }
 #endif
 
@@ -312,14 +312,14 @@ static unsigned int
 do_sha512_transform_ppc8(void *ctx, const unsigned char *data, size_t nblks)
 {
   SHA512_CONTEXT *hd = ctx;
-  return _gcry_sha512_transform_ppc8 (&hd->state.h0, data, nblks);
+  return _gcry_sha512_transform_ppc8 (hd->state.h, data, nblks);
 }
 
 static unsigned int
 do_sha512_transform_ppc9(void *ctx, const unsigned char *data, size_t nblks)
 {
   SHA512_CONTEXT *hd = ctx;
-  return _gcry_sha512_transform_ppc9 (&hd->state.h0, data, nblks);
+  return _gcry_sha512_transform_ppc9 (hd->state.h, data, nblks);
 }
 #endif
 
@@ -332,7 +332,7 @@ do_sha512_transform_s390x (void *ctx, const unsigned char *data, size_t nblks)
 {
   SHA512_CONTEXT *hd = ctx;
 
-  kimd_execute (KMID_FUNCTION_SHA512, &hd->state.h0, data, nblks * 128);
+  kimd_execute (KMID_FUNCTION_SHA512, hd->state.h, data, nblks * 128);
   return 0;
 }
 
@@ -343,18 +343,18 @@ do_sha512_final_s390x (void *ctx, const unsigned char *data, size_t datalen,
   SHA512_CONTEXT *hd = ctx;
 
   /* Make sure that 'final_len' is positioned at correct offset relative
-   * to 'state.h0'. This is because we are passing 'state.h0' pointer as start of
-   * parameter block to 'klmd' instruction. */
+   * to 'state.h[0]'. This is because we are passing 'state.h[0]' pointer as
+   * start of parameter block to 'klmd' instruction. */
 
   gcry_assert (offsetof (SHA512_CONTEXT, final_len_msb)
-	       - offsetof (SHA512_CONTEXT, state.h0) == 8 * sizeof(u64));
+	       - offsetof (SHA512_CONTEXT, state.h[0]) == 8 * sizeof(u64));
   gcry_assert (offsetof (SHA512_CONTEXT, final_len_lsb)
 	       - offsetof (SHA512_CONTEXT, final_len_msb) == 1 * sizeof(u64));
 
   hd->final_len_msb = len_msb;
   hd->final_len_lsb = len_lsb;
 
-  klmd_execute (KMID_FUNCTION_SHA512, &hd->state.h0, data, datalen);
+  klmd_execute (KMID_FUNCTION_SHA512, hd->state.h, data, datalen);
   return 0;
 }
 #endif
@@ -425,14 +425,14 @@ sha512_init (void *context, unsigned int flags)
   SHA512_CONTEXT *ctx = context;
   SHA512_STATE *hd = &ctx->state;
 
-  hd->h0 = U64_C(0x6a09e667f3bcc908);
-  hd->h1 = U64_C(0xbb67ae8584caa73b);
-  hd->h2 = U64_C(0x3c6ef372fe94f82b);
-  hd->h3 = U64_C(0xa54ff53a5f1d36f1);
-  hd->h4 = U64_C(0x510e527fade682d1);
-  hd->h5 = U64_C(0x9b05688c2b3e6c1f);
-  hd->h6 = U64_C(0x1f83d9abfb41bd6b);
-  hd->h7 = U64_C(0x5be0cd19137e2179);
+  hd->h[0] = U64_C(0x6a09e667f3bcc908);
+  hd->h[1] = U64_C(0xbb67ae8584caa73b);
+  hd->h[2] = U64_C(0x3c6ef372fe94f82b);
+  hd->h[3] = U64_C(0xa54ff53a5f1d36f1);
+  hd->h[4] = U64_C(0x510e527fade682d1);
+  hd->h[5] = U64_C(0x9b05688c2b3e6c1f);
+  hd->h[6] = U64_C(0x1f83d9abfb41bd6b);
+  hd->h[7] = U64_C(0x5be0cd19137e2179);
 
   sha512_init_common (ctx, flags);
 }
@@ -443,14 +443,14 @@ sha384_init (void *context, unsigned int flags)
   SHA512_CONTEXT *ctx = context;
   SHA512_STATE *hd = &ctx->state;
 
-  hd->h0 = U64_C(0xcbbb9d5dc1059ed8);
-  hd->h1 = U64_C(0x629a292a367cd507);
-  hd->h2 = U64_C(0x9159015a3070dd17);
-  hd->h3 = U64_C(0x152fecd8f70e5939);
-  hd->h4 = U64_C(0x67332667ffc00b31);
-  hd->h5 = U64_C(0x8eb44a8768581511);
-  hd->h6 = U64_C(0xdb0c2e0d64f98fa7);
-  hd->h7 = U64_C(0x47b5481dbefa4fa4);
+  hd->h[0] = U64_C(0xcbbb9d5dc1059ed8);
+  hd->h[1] = U64_C(0x629a292a367cd507);
+  hd->h[2] = U64_C(0x9159015a3070dd17);
+  hd->h[3] = U64_C(0x152fecd8f70e5939);
+  hd->h[4] = U64_C(0x67332667ffc00b31);
+  hd->h[5] = U64_C(0x8eb44a8768581511);
+  hd->h[6] = U64_C(0xdb0c2e0d64f98fa7);
+  hd->h[7] = U64_C(0x47b5481dbefa4fa4);
 
   sha512_init_common (ctx, flags);
 }
@@ -462,14 +462,14 @@ sha512_256_init (void *context, unsigned int flags)
   SHA512_CONTEXT *ctx = context;
   SHA512_STATE *hd = &ctx->state;
 
-  hd->h0 = U64_C(0x22312194fc2bf72c);
-  hd->h1 = U64_C(0x9f555fa3c84c64c2);
-  hd->h2 = U64_C(0x2393b86b6f53b151);
-  hd->h3 = U64_C(0x963877195940eabd);
-  hd->h4 = U64_C(0x96283ee2a88effe3);
-  hd->h5 = U64_C(0xbe5e1e2553863992);
-  hd->h6 = U64_C(0x2b0199fc2c85b8aa);
-  hd->h7 = U64_C(0x0eb72ddc81c52ca2);
+  hd->h[0] = U64_C(0x22312194fc2bf72c);
+  hd->h[1] = U64_C(0x9f555fa3c84c64c2);
+  hd->h[2] = U64_C(0x2393b86b6f53b151);
+  hd->h[3] = U64_C(0x963877195940eabd);
+  hd->h[4] = U64_C(0x96283ee2a88effe3);
+  hd->h[5] = U64_C(0xbe5e1e2553863992);
+  hd->h[6] = U64_C(0x2b0199fc2c85b8aa);
+  hd->h[7] = U64_C(0x0eb72ddc81c52ca2);
 
   sha512_init_common (ctx, flags);
 }
@@ -481,14 +481,14 @@ sha512_224_init (void *context, unsigned int flags)
   SHA512_CONTEXT *ctx = context;
   SHA512_STATE *hd = &ctx->state;
 
-  hd->h0 = U64_C(0x8c3d37c819544da2);
-  hd->h1 = U64_C(0x73e1996689dcd4d6);
-  hd->h2 = U64_C(0x1dfab7ae32ff9c82);
-  hd->h3 = U64_C(0x679dd514582f9fcf);
-  hd->h4 = U64_C(0x0f6d2b697bd44da8);
-  hd->h5 = U64_C(0x77e36f7304c48942);
-  hd->h6 = U64_C(0x3f9d85a86a1d36c8);
-  hd->h7 = U64_C(0x1112e6ad91d692a1);
+  hd->h[0] = U64_C(0x8c3d37c819544da2);
+  hd->h[1] = U64_C(0x73e1996689dcd4d6);
+  hd->h[2] = U64_C(0x1dfab7ae32ff9c82);
+  hd->h[3] = U64_C(0x679dd514582f9fcf);
+  hd->h[4] = U64_C(0x0f6d2b697bd44da8);
+  hd->h[5] = U64_C(0x77e36f7304c48942);
+  hd->h[6] = U64_C(0x3f9d85a86a1d36c8);
+  hd->h[7] = U64_C(0x1112e6ad91d692a1);
 
   sha512_init_common (ctx, flags);
 }
@@ -543,14 +543,14 @@ do_transform_generic (void *context, const unsigned char *data, size_t nblks)
       int t;
 
       /* get values from the chaining vars */
-      a = hd->h0;
-      b = hd->h1;
-      c = hd->h2;
-      d = hd->h3;
-      e = hd->h4;
-      f = hd->h5;
-      g = hd->h6;
-      h = hd->h7;
+      a = hd->h[0];
+      b = hd->h[1];
+      c = hd->h[2];
+      d = hd->h[3];
+      e = hd->h[4];
+      f = hd->h[5];
+      g = hd->h[6];
+      h = hd->h[7];
 
       for ( t = 0; t < 16; t++ )
         w[t] = buf_get_be64(data + t * 8);
@@ -749,14 +749,14 @@ do_transform_generic (void *context, const unsigned char *data, size_t nblks)
         }
 
       /* Update chaining vars.  */
-      hd->h0 += a;
-      hd->h1 += b;
-      hd->h2 += c;
-      hd->h3 += d;
-      hd->h4 += e;
-      hd->h5 += f;
-      hd->h6 += g;
-      hd->h7 += h;
+      hd->h[0] += a;
+      hd->h[1] += b;
+      hd->h[2] += c;
+      hd->h[3] += d;
+      hd->h[4] += e;
+      hd->h[5] += f;
+      hd->h[6] += g;
+      hd->h[7] += h;
 
       data += 128;
     }
@@ -836,7 +836,7 @@ sha512_final (void *context)
     }
 
   p = hd->bctx.buf;
-#define X(a) do { buf_put_be64(p, hd->state.h##a); p += 8; } while (0)
+#define X(a) do { buf_put_be64(p, hd->state.h[a]); p += 8; } while (0)
   X (0);
   X (1);
   X (2);
-- 
2.32.0




More information about the Gcrypt-devel mailing list