summary refs log tree commit diff stats
path: root/tests/tcg/multiarch/linux/linux-shmat-null.c
diff options
context:
space:
mode:
authorIlya Leoshkevich <iii@linux.ibm.com>2024-03-25 20:23:02 +0100
committerRichard Henderson <richard.henderson@linaro.org>2024-03-26 18:20:36 -1000
commit889cd5a8e2dd6cf8793faba22fda38b78553ae24 (patch)
tree6748d9a6e25efea17938745e708d1055ac82b380 /tests/tcg/multiarch/linux/linux-shmat-null.c
parentfa527b44c2d65d48cc3c5ac018dc935cc286f5a9 (diff)
downloadfocaccia-qemu-889cd5a8e2dd6cf8793faba22fda38b78553ae24.tar.gz
focaccia-qemu-889cd5a8e2dd6cf8793faba22fda38b78553ae24.zip
tests/tcg: Test shmat(NULL)
Add a small test to prevent regressions.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Message-Id: <20240325192436.561154-5-iii@linux.ibm.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'tests/tcg/multiarch/linux/linux-shmat-null.c')
-rw-r--r--tests/tcg/multiarch/linux/linux-shmat-null.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/tcg/multiarch/linux/linux-shmat-null.c b/tests/tcg/multiarch/linux/linux-shmat-null.c
new file mode 100644
index 0000000000..94eaaec371
--- /dev/null
+++ b/tests/tcg/multiarch/linux/linux-shmat-null.c
@@ -0,0 +1,38 @@
+/*
+ * Test shmat(NULL).
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#include <assert.h>
+#include <stdlib.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+int main(void)
+{
+    int shmid;
+    char *p;
+    int err;
+
+    /* Create, attach and intialize shared memory. */
+    shmid = shmget(IPC_PRIVATE, 1, IPC_CREAT | 0600);
+    assert(shmid != -1);
+    p = shmat(shmid, NULL, 0);
+    assert(p != (void *)-1);
+    *p = 42;
+
+    /* Reattach, check that the value is still there. */
+    err = shmdt(p);
+    assert(err == 0);
+    p = shmat(shmid, NULL, 0);
+    assert(p != (void *)-1);
+    assert(*p == 42);
+
+    /* Detach. */
+    err = shmdt(p);
+    assert(err == 0);
+    err = shmctl(shmid, IPC_RMID, NULL);
+    assert(err == 0);
+
+    return EXIT_SUCCESS;
+}