[sanitizer_common] Fix sha2 interceptors not to use vars in array len
authorMichal Gorny <mgorny@gentoo.org>
Wed, 19 Dec 2018 17:22:14 +0000 (17:22 +0000)
committerMichal Gorny <mgorny@gentoo.org>
Wed, 19 Dec 2018 17:22:14 +0000 (17:22 +0000)
Fix the sha2 interceptor macros to use a constant for array parameter
length rather than referencing the extern variable.  Since the digest
length is provided in hash name, reuse the macro parameter for it.
Verify that the calculated value matches the one provided by system
headers.

Differential Revision: https://reviews.llvm.org/D55811

llvm-svn: 349645

compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors.inc

index 37743a0..ff378e1 100644 (file)
@@ -8511,9 +8511,10 @@ INTERCEPTOR(char *, MD2Data, const unsigned char *data, unsigned int len,
     if (context) \
       COMMON_INTERCEPTOR_WRITE_RANGE(ctx, context, SHA##LEN##_CTX_sz); \
   } \
-  INTERCEPTOR(void, SHA##LEN##_Final, u8 digest[SHA##LEN##_digest_length], \
+  INTERCEPTOR(void, SHA##LEN##_Final, u8 digest[LEN/8], \
   void *context) { \
     void *ctx; \
+    CHECK_EQ(SHA##LEN##_digest_length, LEN/8); \
     COMMON_INTERCEPTOR_ENTER(ctx, SHA##LEN##_Final, digest, context); \
     if (context) \
       COMMON_INTERCEPTOR_READ_RANGE(ctx, context, SHA##LEN##_CTX_sz); \