43 lines
1,022 B
C
43 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;
|
||
|
}
|