200 lines
6.2 KiB
Diff
200 lines
6.2 KiB
Diff
From dd8d558394b2b8cb7f743a2a4bf763974d6c2dd9 Mon Sep 17 00:00:00 2001
|
|
From: "Dmitry V. Levin" <ldv@altlinux.org>
|
|
Date: Sun, 6 Dec 2020 08:00:00 +0000
|
|
Subject: [PATCH 162/162] tests: disable tests for invalid semctl commands on
|
|
glibc >= 2.32
|
|
|
|
Starting with commit glibc-2.32.9000-147-ga16d2abd496bd974a882,
|
|
glibc skips semctl syscall invocations and returns EINVAL
|
|
for invalid semctl commands.
|
|
|
|
* tests/ipc_sem.c [GLIBC_PREREQ_GE(2, 32)] (TEST_SEMCTL_BOGUS_CMD):
|
|
Define to 0.
|
|
[!TEST_SEMCTL_BOGUS_CMD] (TEST_SEMCTL_BOGUS_CMD): Define to 1.
|
|
(main) [!TEST_SEMCTL_BOGUS_CMD] (bogus_semid, bogus_semnum, bogus_cmd,
|
|
bogus_arg): Do not define and do not use.
|
|
---
|
|
tests/ipc_sem.c | 25 ++++++++++++++++++++++---
|
|
1 file changed, 22 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/tests/ipc_sem.c b/tests/ipc_sem.c
|
|
index 7341f72..0351e53 100644
|
|
--- a/tests/ipc_sem.c
|
|
+++ b/tests/ipc_sem.c
|
|
@@ -20,6 +20,21 @@
|
|
# define SEM_STAT_ANY 20
|
|
#endif
|
|
|
|
+#undef TEST_SEMCTL_BOGUS_CMD
|
|
+
|
|
+/*
|
|
+ * Starting with commit glibc-2.32.9000-147-ga16d2abd496bd974a882,
|
|
+ * glibc skips semctl syscall invocations and returns EINVAL
|
|
+ * for invalid semctl commands.
|
|
+ */
|
|
+#if GLIBC_PREREQ_GE(2, 32)
|
|
+# define TEST_SEMCTL_BOGUS_CMD 0
|
|
+#endif
|
|
+
|
|
+#ifndef TEST_SEMCTL_BOGUS_CMD
|
|
+# define TEST_SEMCTL_BOGUS_CMD 1
|
|
+#endif
|
|
+
|
|
#if XLAT_RAW
|
|
# define str_ipc_flags "0xface1e00"
|
|
# define str_ipc_private "0"
|
|
@@ -78,13 +93,15 @@ main(void)
|
|
static const key_t private_key =
|
|
(key_t) (0xffffffff00000000ULL | IPC_PRIVATE);
|
|
static const key_t bogus_key = (key_t) 0xeca86420fdb97531ULL;
|
|
- static const int bogus_semid = 0xfdb97531;
|
|
- static const int bogus_semnum = 0xeca86420;
|
|
static const int bogus_size = 0xdec0ded1;
|
|
static const int bogus_flags = 0xface1e55;
|
|
+#if TEST_SEMCTL_BOGUS_CMD
|
|
+ static const int bogus_semid = 0xfdb97531;
|
|
+ static const int bogus_semnum = 0xeca86420;
|
|
static const int bogus_cmd = 0xdeadbeef;
|
|
static const unsigned long bogus_arg =
|
|
(unsigned long) 0xbadc0dedfffffaceULL;
|
|
+#endif
|
|
|
|
int rc;
|
|
union semun un;
|
|
@@ -102,11 +119,13 @@ main(void)
|
|
printf("semget\\(%s, 1, 0600\\) = %d\n", str_ipc_private, id);
|
|
atexit(cleanup);
|
|
|
|
+#if TEST_SEMCTL_BOGUS_CMD
|
|
rc = semctl(bogus_semid, bogus_semnum, bogus_cmd, bogus_arg);
|
|
-#define SEMCTL_BOGUS_ARG_FMT "(%#lx|\\[(%#lx|NULL)\\]|NULL)"
|
|
+# define SEMCTL_BOGUS_ARG_FMT "(%#lx|\\[(%#lx|NULL)\\]|NULL)"
|
|
printf("semctl\\(%d, %d, (%s\\|)?%s, " SEMCTL_BOGUS_ARG_FMT "\\) = %s\n",
|
|
bogus_semid, bogus_semnum, str_ipc_64, str_bogus_cmd,
|
|
bogus_arg, bogus_arg, sprintrc_grep(rc));
|
|
+#endif
|
|
|
|
un.buf = &ds;
|
|
if (semctl(id, 0, IPC_STAT, un))
|
|
diff --git a/tests-m32/ipc_sem.c b/tests-m32/ipc_sem.c
|
|
index 7341f72..0351e53 100644
|
|
--- a/tests-m32/ipc_sem.c
|
|
+++ b/tests-m32/ipc_sem.c
|
|
@@ -20,6 +20,21 @@
|
|
# define SEM_STAT_ANY 20
|
|
#endif
|
|
|
|
+#undef TEST_SEMCTL_BOGUS_CMD
|
|
+
|
|
+/*
|
|
+ * Starting with commit glibc-2.32.9000-147-ga16d2abd496bd974a882,
|
|
+ * glibc skips semctl syscall invocations and returns EINVAL
|
|
+ * for invalid semctl commands.
|
|
+ */
|
|
+#if GLIBC_PREREQ_GE(2, 32)
|
|
+# define TEST_SEMCTL_BOGUS_CMD 0
|
|
+#endif
|
|
+
|
|
+#ifndef TEST_SEMCTL_BOGUS_CMD
|
|
+# define TEST_SEMCTL_BOGUS_CMD 1
|
|
+#endif
|
|
+
|
|
#if XLAT_RAW
|
|
# define str_ipc_flags "0xface1e00"
|
|
# define str_ipc_private "0"
|
|
@@ -78,13 +93,15 @@ main(void)
|
|
static const key_t private_key =
|
|
(key_t) (0xffffffff00000000ULL | IPC_PRIVATE);
|
|
static const key_t bogus_key = (key_t) 0xeca86420fdb97531ULL;
|
|
- static const int bogus_semid = 0xfdb97531;
|
|
- static const int bogus_semnum = 0xeca86420;
|
|
static const int bogus_size = 0xdec0ded1;
|
|
static const int bogus_flags = 0xface1e55;
|
|
+#if TEST_SEMCTL_BOGUS_CMD
|
|
+ static const int bogus_semid = 0xfdb97531;
|
|
+ static const int bogus_semnum = 0xeca86420;
|
|
static const int bogus_cmd = 0xdeadbeef;
|
|
static const unsigned long bogus_arg =
|
|
(unsigned long) 0xbadc0dedfffffaceULL;
|
|
+#endif
|
|
|
|
int rc;
|
|
union semun un;
|
|
@@ -102,11 +119,13 @@ main(void)
|
|
printf("semget\\(%s, 1, 0600\\) = %d\n", str_ipc_private, id);
|
|
atexit(cleanup);
|
|
|
|
+#if TEST_SEMCTL_BOGUS_CMD
|
|
rc = semctl(bogus_semid, bogus_semnum, bogus_cmd, bogus_arg);
|
|
-#define SEMCTL_BOGUS_ARG_FMT "(%#lx|\\[(%#lx|NULL)\\]|NULL)"
|
|
+# define SEMCTL_BOGUS_ARG_FMT "(%#lx|\\[(%#lx|NULL)\\]|NULL)"
|
|
printf("semctl\\(%d, %d, (%s\\|)?%s, " SEMCTL_BOGUS_ARG_FMT "\\) = %s\n",
|
|
bogus_semid, bogus_semnum, str_ipc_64, str_bogus_cmd,
|
|
bogus_arg, bogus_arg, sprintrc_grep(rc));
|
|
+#endif
|
|
|
|
un.buf = &ds;
|
|
if (semctl(id, 0, IPC_STAT, un))
|
|
diff --git a/tests-mx32/ipc_sem.c b/tests-mx32/ipc_sem.c
|
|
index 7341f72..0351e53 100644
|
|
--- a/tests-mx32/ipc_sem.c
|
|
+++ b/tests-mx32/ipc_sem.c
|
|
@@ -20,6 +20,21 @@
|
|
# define SEM_STAT_ANY 20
|
|
#endif
|
|
|
|
+#undef TEST_SEMCTL_BOGUS_CMD
|
|
+
|
|
+/*
|
|
+ * Starting with commit glibc-2.32.9000-147-ga16d2abd496bd974a882,
|
|
+ * glibc skips semctl syscall invocations and returns EINVAL
|
|
+ * for invalid semctl commands.
|
|
+ */
|
|
+#if GLIBC_PREREQ_GE(2, 32)
|
|
+# define TEST_SEMCTL_BOGUS_CMD 0
|
|
+#endif
|
|
+
|
|
+#ifndef TEST_SEMCTL_BOGUS_CMD
|
|
+# define TEST_SEMCTL_BOGUS_CMD 1
|
|
+#endif
|
|
+
|
|
#if XLAT_RAW
|
|
# define str_ipc_flags "0xface1e00"
|
|
# define str_ipc_private "0"
|
|
@@ -78,13 +93,15 @@ main(void)
|
|
static const key_t private_key =
|
|
(key_t) (0xffffffff00000000ULL | IPC_PRIVATE);
|
|
static const key_t bogus_key = (key_t) 0xeca86420fdb97531ULL;
|
|
- static const int bogus_semid = 0xfdb97531;
|
|
- static const int bogus_semnum = 0xeca86420;
|
|
static const int bogus_size = 0xdec0ded1;
|
|
static const int bogus_flags = 0xface1e55;
|
|
+#if TEST_SEMCTL_BOGUS_CMD
|
|
+ static const int bogus_semid = 0xfdb97531;
|
|
+ static const int bogus_semnum = 0xeca86420;
|
|
static const int bogus_cmd = 0xdeadbeef;
|
|
static const unsigned long bogus_arg =
|
|
(unsigned long) 0xbadc0dedfffffaceULL;
|
|
+#endif
|
|
|
|
int rc;
|
|
union semun un;
|
|
@@ -102,11 +119,13 @@ main(void)
|
|
printf("semget\\(%s, 1, 0600\\) = %d\n", str_ipc_private, id);
|
|
atexit(cleanup);
|
|
|
|
+#if TEST_SEMCTL_BOGUS_CMD
|
|
rc = semctl(bogus_semid, bogus_semnum, bogus_cmd, bogus_arg);
|
|
-#define SEMCTL_BOGUS_ARG_FMT "(%#lx|\\[(%#lx|NULL)\\]|NULL)"
|
|
+# define SEMCTL_BOGUS_ARG_FMT "(%#lx|\\[(%#lx|NULL)\\]|NULL)"
|
|
printf("semctl\\(%d, %d, (%s\\|)?%s, " SEMCTL_BOGUS_ARG_FMT "\\) = %s\n",
|
|
bogus_semid, bogus_semnum, str_ipc_64, str_bogus_cmd,
|
|
bogus_arg, bogus_arg, sprintrc_grep(rc));
|
|
+#endif
|
|
|
|
un.buf = &ds;
|
|
if (semctl(id, 0, IPC_STAT, un))
|
|
--
|
|
2.1.4
|
|
|