Skip to content

Commit

Permalink
Suppress MemorySanitizer false positive
Browse files Browse the repository at this point in the history
MemorySanitizer does not support assembly, and therefore produces a
false positive on `blake3_hasher_finalize` and related functions.
  • Loading branch information
jbms committed Feb 17, 2023
1 parent 64747d4 commit 680bdb5
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions c/blake3.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@
#include "blake3.h"
#include "blake3_impl.h"

#ifdef __has_feature
#if __has_feature(memory_sanitizer)
#include <sanitizer/msan_interface.h>
#define BLAKE3_MEMORY_SANITIZER_BUILD
#endif
#endif

const char *blake3_version(void) { return BLAKE3_VERSION_STRING; }

INLINE void chunk_state_init(blake3_chunk_state *self, const uint32_t key[8],
Expand Down Expand Up @@ -580,6 +587,10 @@ void blake3_hasher_finalize_seek(const blake3_hasher *self, uint64_t seek,
if (self->cv_stack_len == 0) {
output_t output = chunk_state_output(&self->chunk);
output_root_bytes(&output, seek, out, out_len);
#ifdef BLAKE3_MEMORY_SANITIZER_BUILD
// MemorySanitizer gives a false positive due to use of assembly.
__msan_unpoison(out, out_len);
#endif
return;
}
// If there are any bytes in the chunk state, finalize that chunk and do a
Expand Down Expand Up @@ -608,6 +619,10 @@ void blake3_hasher_finalize_seek(const blake3_hasher *self, uint64_t seek,
output = parent_output(parent_block, self->key, self->chunk.flags);
}
output_root_bytes(&output, seek, out, out_len);
#ifdef BLAKE3_MEMORY_SANITIZER_BUILD
// MemorySanitizer gives a false positive due to use of assembly.
__msan_unpoison(out, out_len);
#endif
}

void blake3_hasher_reset(blake3_hasher *self) {
Expand Down

0 comments on commit 680bdb5

Please sign in to comment.