summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmmar Faizi <ammarfaizi2@gnuweeb.org>2022-04-23 03:35:42 +0700
committerJens Axboe <axboe@kernel.dk>2022-04-22 15:15:28 -0600
commit7ad5e52d4d2f91203615cd738e56aba10ad8b8f6 (patch)
tree7ef4a92fc089d13facd2ea7f174d16d3c1896316
parentb07accbc2035c607443936fc0c1f78ae1bc46db7 (diff)
downloadliburing-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.c13
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;