aboutsummaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
authorDylan Yudaken <dyudaken@gmail.com>2023-07-25 20:29:44 +0100
committerAleksandr Nogikh <nogikh@google.com>2023-07-30 13:35:50 +0000
commit458a107b4b78803973245909f1f3ab19081ca63b (patch)
tree07d4399418cd05a66f939eb35f4f0047e372023a /pkg
parent924768299f97ac88b84f09eb979919305c8af5bb (diff)
sys/linux/io_uring, executor/common_linux: fix io_uring segfault
In Linux 6.4+ it is not allowed to provide a vma to mmap(2) [1]. Change the API to request the address from the Kernel. Note I do not know why this was done in the first place, but it seems not to be useful. [1]: https://github.com/torvalds/linux/commit/d808459b2e31bd5123a14258a7a529995db974c8
Diffstat (limited to 'pkg')
-rw-r--r--pkg/csource/generated.go12
1 files changed, 5 insertions, 7 deletions
diff --git a/pkg/csource/generated.go b/pkg/csource/generated.go
index 4f704ebf9..019cd1582 100644
--- a/pkg/csource/generated.go
+++ b/pkg/csource/generated.go
@@ -4447,23 +4447,21 @@ struct io_uring_params {
#include <sys/mman.h>
#include <unistd.h>
-static long syz_io_uring_setup(volatile long a0, volatile long a1, volatile long a2, volatile long a3, volatile long a4, volatile long a5)
+static long syz_io_uring_setup(volatile long a0, volatile long a1, volatile long a2, volatile long a3)
{
uint32 entries = (uint32)a0;
struct io_uring_params* setup_params = (struct io_uring_params*)a1;
- void* vma1 = (void*)a2;
- void* vma2 = (void*)a3;
- void** ring_ptr_out = (void**)a4;
- void** sqes_ptr_out = (void**)a5;
+ void** ring_ptr_out = (void**)a2;
+ void** sqes_ptr_out = (void**)a3;
uint32 fd_io_uring = syscall(__NR_io_uring_setup, entries, setup_params);
uint32 sq_ring_sz = setup_params->sq_off.array + setup_params->sq_entries * sizeof(uint32);
uint32 cq_ring_sz = setup_params->cq_off.cqes + setup_params->cq_entries * SIZEOF_IO_URING_CQE;
uint32 ring_sz = sq_ring_sz > cq_ring_sz ? sq_ring_sz : cq_ring_sz;
- *ring_ptr_out = mmap(vma1, ring_sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE | MAP_FIXED, fd_io_uring, IORING_OFF_SQ_RING);
+ *ring_ptr_out = mmap(0, ring_sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd_io_uring, IORING_OFF_SQ_RING);
uint32 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);
+ *sqes_ptr_out = mmap(0, sqes_sz, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_POPULATE, fd_io_uring, IORING_OFF_SQES);
return fd_io_uring;
}