aboutsummaryrefslogtreecommitdiffstats
path: root/executor
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-09-15 08:26:45 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-09-15 08:40:10 +0200
commita2360d0742f01e40bf4fb1714de4503f8a82aa3f (patch)
treed19f7a0ea5283ace73add853922b595d44030a6c /executor
parent6c16e36a7bc8ca1fa66de37e6e70003e0f14e2e8 (diff)
executor: fix definition of __NR_io_uring_setup
Sone syzbot instances broke with: <stdin>: In function ‘syz_io_uring_setup’: <stdin>:476:33: error: ‘__NR_io_uring_setup’ undeclared (first use in this function) <stdin>:476:33: note: each undeclared identifier is reported only once for each function it appears in pkg/csource resolves #ifdef's at generation time.
Diffstat (limited to 'executor')
-rw-r--r--executor/common_linux.h12
-rw-r--r--executor/style_test.go18
2 files changed, 23 insertions, 7 deletions
diff --git a/executor/common_linux.h b/executor/common_linux.h
index a9ca4ac27..2c45387d8 100644
--- a/executor/common_linux.h
+++ b/executor/common_linux.h
@@ -1467,13 +1467,11 @@ struct io_uring_params {
#include <sys/mman.h>
#include <unistd.h>
-#ifndef __NR_io_uring_setup
-#ifdef __alpha__
-#define __NR_io_uring_setup 535
-#else // !__alpha__
-#define __NR_io_uring_setup 425
+#if GOARCH_mips64le
+#define sys_io_uring_setup 5425
+#else
+#define sys_io_uring_setup 425
#endif
-#endif // __NR_io_uring_setup
// Wrapper for io_uring_setup and the subsequent mmap calls that map the ring and the sqes
static long syz_io_uring_setup(volatile long a0, volatile long a1, volatile long a2, volatile long a3, volatile long a4, volatile long a5)
@@ -1489,7 +1487,7 @@ static long syz_io_uring_setup(volatile long a0, volatile long a1, volatile long
void** ring_ptr_out = (void**)a4;
void** sqes_ptr_out = (void**)a5;
- uint32 fd_io_uring = syscall(__NR_io_uring_setup, entries, setup_params);
+ uint32 fd_io_uring = syscall(sys_io_uring_setup, entries, setup_params);
// Compute the ring sizes
uint32 sq_ring_sz = setup_params->sq_off.array + setup_params->sq_entries * sizeof(uint32);
diff --git a/executor/style_test.go b/executor/style_test.go
index 488752626..f6f5856f3 100644
--- a/executor/style_test.go
+++ b/executor/style_test.go
@@ -44,6 +44,24 @@ if (foo)
},
},
{
+ pattern: `#define __NR_`,
+ message: "Don't define syscall __NR_foo constants.\n" +
+ "These should be guarded by #ifndef __NR_foo, but this is dependent on the host " +
+ "and may break on other machines (after pkg/csource processing).\n" +
+ "Define sys_foo constants instead.",
+ tests: []string{
+ `
+#ifndef __NR_io_uring_setup
+#ifdef __alpha__
+#define __NR_io_uring_setup 535
+#else // !__alpha__
+#define __NR_io_uring_setup 425
+#endif
+#endif // __NR_io_uring_setup
+`,
+ },
+ },
+ {
pattern: `//[^\s]`,
suppression: `https?://`,
message: "Add a space after //",