diff options
author | van Hauser <vh@thc.org> | 2021-03-24 11:25:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-24 11:25:33 +0100 |
commit | f0e08e648609e57732a76e285e57714c6d5fd2cd (patch) | |
tree | 9d35021985e2b6ea2b2988f318195d238e6fabc3 /qemu_mode/libqasan/malloc.c | |
parent | 37829765282421d9e3cb9448bceedcb58256e76a (diff) | |
parent | 2dac4e785fa9f27e8c59bb504cfa8942eba938be (diff) | |
download | afl++-f0e08e648609e57732a76e285e57714c6d5fd2cd.tar.gz |
Merge pull request #842 from AFLplusplus/stable
3.12c release
Diffstat (limited to 'qemu_mode/libqasan/malloc.c')
-rw-r--r-- | qemu_mode/libqasan/malloc.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/qemu_mode/libqasan/malloc.c b/qemu_mode/libqasan/malloc.c index 5a2d2a0c..6fe6fc8c 100644 --- a/qemu_mode/libqasan/malloc.c +++ b/qemu_mode/libqasan/malloc.c @@ -159,6 +159,9 @@ size_t __libqasan_malloc_usable_size(void *ptr) { char *p = ptr; p -= sizeof(struct chunk_begin); + // Validate that the chunk marker is readable (a crude check + // to verify that ptr is a valid malloc region before we dereference it) + QASAN_LOAD(p, sizeof(struct chunk_begin) - REDZONE_SIZE); return ((struct chunk_begin *)p)->requested_size; } @@ -225,6 +228,9 @@ void __libqasan_free(void *ptr) { struct chunk_begin *p = ptr; p -= 1; + // Validate that the chunk marker is readable (a crude check + // to verify that ptr is a valid malloc region before we dereference it) + QASAN_LOAD(p, sizeof(struct chunk_begin) - REDZONE_SIZE); size_t n = p->requested_size; QASAN_STORE(ptr, n); |