42 lines
1,022 B
C
42 lines
1,022 B
C
// Test that disabling/enabling tagging does not trigger false reports on
|
|
// allocations happened in a different state.
|
|
|
|
// RUN: %clang_hwasan -O1 %s -o %t && %run %t 2>&1
|
|
|
|
#include <assert.h>
|
|
#include <sanitizer/hwasan_interface.h>
|
|
#include <stdlib.h>
|
|
|
|
enum {
|
|
COUNT = 5,
|
|
SZ = 10,
|
|
};
|
|
void *x[COUNT];
|
|
|
|
int main() {
|
|
__hwasan_enable_allocator_tagging();
|
|
for (unsigned i = 0; i < COUNT; ++i) {
|
|
x[i] = malloc(SZ);
|
|
assert(__hwasan_test_shadow(x[i], SZ) == -1);
|
|
}
|
|
for (unsigned i = 0; i < COUNT; ++i)
|
|
free(x[i]);
|
|
|
|
__hwasan_disable_allocator_tagging();
|
|
for (unsigned i = 0; i < COUNT; ++i) {
|
|
x[i] = malloc(SZ);
|
|
assert(__hwasan_tag_pointer(x[i], 0) == x[i]);
|
|
assert(__hwasan_test_shadow(x[i], SZ) == -1);
|
|
}
|
|
for (unsigned i = 0; i < COUNT; ++i)
|
|
free(x[i]);
|
|
|
|
__hwasan_enable_allocator_tagging();
|
|
for (unsigned i = 0; i < COUNT; ++i) {
|
|
x[i] = malloc(SZ);
|
|
assert(__hwasan_test_shadow(x[i], SZ) == -1);
|
|
}
|
|
for (unsigned i = 0; i < COUNT; ++i)
|
|
free(x[i]);
|
|
return 0;
|
|
}
|