mirror of
https://github.com/GrapheneOS/hardened_malloc.git
synced 2024-12-24 23:19:35 -05:00
test: add regression test for missing init() in realloc()
This commit is contained in:
parent
9cb4e6daf6
commit
903cba5a84
1
test/.gitignore
vendored
1
test/.gitignore
vendored
@ -40,4 +40,5 @@ overflow_small_1_byte
|
|||||||
overflow_small_8_byte
|
overflow_small_8_byte
|
||||||
uninitialized_read_large
|
uninitialized_read_large
|
||||||
uninitialized_read_small
|
uninitialized_read_small
|
||||||
|
realloc_init
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
@ -66,7 +66,8 @@ EXECUTABLES := \
|
|||||||
malloc_object_size_offset \
|
malloc_object_size_offset \
|
||||||
invalid_malloc_object_size_small \
|
invalid_malloc_object_size_small \
|
||||||
invalid_malloc_object_size_small_quarantine \
|
invalid_malloc_object_size_small_quarantine \
|
||||||
impossibly_large_malloc
|
impossibly_large_malloc \
|
||||||
|
realloc_init
|
||||||
|
|
||||||
all: $(EXECUTABLES)
|
all: $(EXECUTABLES)
|
||||||
|
|
||||||
|
33
test/realloc_init.c
Normal file
33
test/realloc_init.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include <pthread.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static void *thread_func(void *arg) {
|
||||||
|
arg = realloc(arg, 1024);
|
||||||
|
if (!arg) {
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
free(arg);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
void *mem = realloc(NULL, 12);
|
||||||
|
if (!mem) {
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pthread_t thread;
|
||||||
|
int r = pthread_create(&thread, NULL, thread_func, mem);
|
||||||
|
if (r != 0) {
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = pthread_join(thread, NULL);
|
||||||
|
if (r != 0) {
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
@ -233,6 +233,10 @@ class TestSimpleMemoryCorruption(unittest.TestCase):
|
|||||||
"uninitialized_read_large")
|
"uninitialized_read_large")
|
||||||
self.assertEqual(returncode, 0)
|
self.assertEqual(returncode, 0)
|
||||||
|
|
||||||
|
def test_realloc_init(self):
|
||||||
|
_stdout, _stderr, returncode = self.run_test(
|
||||||
|
"realloc_init")
|
||||||
|
self.assertEqual(returncode, 0)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
Reference in New Issue
Block a user