diff options
author | Ammar Faizi <ammarfaizi2@gnuweeb.org> | 2022-04-23 03:35:42 +0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2022-04-22 15:15:28 -0600 |
commit | 7ad5e52d4d2f91203615cd738e56aba10ad8b8f6 (patch) | |
tree | 7ef4a92fc089d13facd2ea7f174d16d3c1896316 | |
parent | b07accbc2035c607443936fc0c1f78ae1bc46db7 (diff) | |
download | liburing-7ad5e52d4d2f91203615cd738e56aba10ad8b8f6.tar.gz liburing-7ad5e52d4d2f91203615cd738e56aba10ad8b8f6.tar.bz2 |
test/double-poll-crash: Skip this test if the `mmap()` fails
This test is very prone to hiting a SIGSEGV signal due to missing error
handling on mmap() calls. This especially often happens when executing
`runtests-parallel`. Let's just skip this test if those calls fail
instead of having a random segfault with no clear resolution.
Signed-off-by: Ammar Faizi <ammarfaizi2@gnuweeb.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | test/double-poll-crash.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/test/double-poll-crash.c b/test/double-poll-crash.c index 5bfce09..231c7da 100644 --- a/test/double-poll-crash.c +++ b/test/double-poll-crash.c @@ -52,10 +52,14 @@ static long syz_io_uring_setup(volatile long a0, volatile long a1, *ring_ptr_out = mmap(vma1, ring_sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE | MAP_FIXED, fd_io_uring, IORING_OFF_SQ_RING); + if (*ring_ptr_out == MAP_FAILED) + exit(0); uint32_t sqes_sz = setup_params->sq_entries * SIZEOF_IO_URING_SQE; *sqes_ptr_out = mmap(vma2, sqes_sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE | MAP_FIXED, fd_io_uring, IORING_OFF_SQES); + if (*sqes_ptr_out == MAP_FAILED) + exit(0); return fd_io_uring; } @@ -108,6 +112,7 @@ uint64_t r[4] = {0xffffffffffffffff, 0x0, 0x0, 0xffffffffffffffff}; int main(int argc, char *argv[]) { + void *mmap_ret; #if !defined(__i386) && !defined(__x86_64__) return 0; #endif @@ -115,8 +120,12 @@ int main(int argc, char *argv[]) if (argc > 1) return 0; - mmap((void *)0x20000000ul, 0x1000000ul, 7ul, 0x32ul, -1, 0ul); - mmap((void *)0x21000000ul, 0x1000ul, 0ul, 0x32ul, -1, 0ul); + mmap_ret = mmap((void *)0x20000000ul, 0x1000000ul, 7ul, 0x32ul, -1, 0ul); + if (mmap_ret == MAP_FAILED) + return 0; + mmap_ret = mmap((void *)0x21000000ul, 0x1000ul, 0ul, 0x32ul, -1, 0ul); + if (mmap_ret == MAP_FAILED) + return 0; intptr_t res = 0; *(uint32_t*)0x20000484 = 0; *(uint32_t*)0x20000488 = 0; |