mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 11:06:33 +00:00
Fix some page size assumptions in the HWASan tests.
Reviewers: fmayer, vitalybuka Reviewed By: fmayer, vitalybuka Pull Request: https://github.com/llvm/llvm-project/pull/134941
This commit is contained in:
parent
9c38b2e513
commit
0428252db3
@ -7,6 +7,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/auxv.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
@ -17,17 +18,18 @@
|
||||
const unsigned char kTag = 42;
|
||||
const size_t kNumShadowPages = 1024;
|
||||
const size_t kNumPages = 16 * kNumShadowPages;
|
||||
const size_t kPageSize = 4096;
|
||||
const size_t kMapSize = kNumPages * kPageSize;
|
||||
|
||||
size_t page_size, map_size;
|
||||
|
||||
void sync_rss() {
|
||||
char *page = (char *)mmap(0, kPageSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
|
||||
char *page = (char *)mmap(0, page_size, PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
|
||||
// Linux kernel updates RSS counters after a set number of page faults.
|
||||
for (int i = 0; i < 100; ++i) {
|
||||
page[0] = 42;
|
||||
madvise(page, kPageSize, MADV_DONTNEED);
|
||||
madvise(page, page_size, MADV_DONTNEED);
|
||||
}
|
||||
munmap(page, kPageSize);
|
||||
munmap(page, page_size);
|
||||
}
|
||||
|
||||
size_t current_rss() {
|
||||
@ -45,9 +47,9 @@ size_t current_rss() {
|
||||
}
|
||||
|
||||
int test_rss_difference(void *p) {
|
||||
__hwasan_tag_memory(p, kTag, kMapSize);
|
||||
__hwasan_tag_memory(p, kTag, map_size);
|
||||
size_t rss_before = current_rss();
|
||||
__hwasan_tag_memory(p, 0, kMapSize);
|
||||
__hwasan_tag_memory(p, 0, map_size);
|
||||
size_t rss_after = current_rss();
|
||||
fprintf(stderr, "%zu -> %zu\n", rss_before, rss_after);
|
||||
if (rss_before <= rss_after)
|
||||
@ -59,10 +61,14 @@ int test_rss_difference(void *p) {
|
||||
}
|
||||
|
||||
int main() {
|
||||
page_size = getauxval(AT_PAGESZ);
|
||||
map_size = kNumPages * page_size;
|
||||
|
||||
fprintf(stderr, "starting rss %zu\n", current_rss());
|
||||
fprintf(stderr, "shadow pages: %zu\n", kNumShadowPages);
|
||||
|
||||
void *p = mmap(0, kMapSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
|
||||
void *p = mmap(0, map_size, PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
|
||||
fprintf(stderr, "p = %p\n", p);
|
||||
|
||||
size_t total_count = 10;
|
||||
|
@ -47,11 +47,11 @@ int main(int argc, char **argv) {
|
||||
// CHECKm30: Cause: heap-buffer-overflow
|
||||
// CHECKm30: is located 30 bytes before a 30-byte region
|
||||
//
|
||||
// CHECKMm30: is a large allocated heap chunk; size: 1003520 offset: -30
|
||||
// CHECKMm30: is a large allocated heap chunk; size: {{[0-9]*}} offset: -30
|
||||
// CHECKMm30: Cause: heap-buffer-overflow
|
||||
// CHECKMm30: is located 30 bytes before a 1000000-byte region
|
||||
//
|
||||
// CHECKM: is a large allocated heap chunk; size: 1003520 offset: 1000000
|
||||
// CHECKM: is a large allocated heap chunk; size: {{[0-9]*}} offset: 1000000
|
||||
// CHECKM: Cause: heap-buffer-overflow
|
||||
// CHECKM: is located 0 bytes after a 1000000-byte region
|
||||
//
|
||||
|
@ -7,15 +7,17 @@
|
||||
#include <sanitizer/hwasan_interface.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/auxv.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
static volatile char sink;
|
||||
extern void *__hwasan_shadow_memory_dynamic_address;
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
void *high_addr = (char *)__hwasan_shadow_memory_dynamic_address - 0x1000;
|
||||
void *r = mmap(high_addr, 4096, PROT_READ, MAP_FIXED | MAP_ANON | MAP_PRIVATE,
|
||||
-1, 0);
|
||||
size_t page_size = getauxval(AT_PAGESZ);
|
||||
void *high_addr = (char *)__hwasan_shadow_memory_dynamic_address - page_size;
|
||||
void *r = mmap(high_addr, page_size, PROT_READ,
|
||||
MAP_FIXED | MAP_ANON | MAP_PRIVATE, -1, 0);
|
||||
if (r == MAP_FAILED) {
|
||||
fprintf(stderr, "Failed to mmap\n");
|
||||
abort();
|
||||
|
Loading…
x
Reference in New Issue
Block a user