/memcheck/tests/x86-linux/scalar_fork
/memcheck/tests/x86-linux/scalar_supp
/memcheck/tests/x86-linux/scalar_vfork
+/memcheck/tests/x86-linux/shm
# /memcheck/tests/x86-solaris/
/memcheck/tests/x86-solaris/*.stderr.diff
501348 glibc built with -march=x86-64-v3 does not work due to ld.so memcmp
501479 Illumos DRD pthread_mutex_init wrapper errors
501365 syscall userfaultfd not wrapped
+501846 Add x86 Linux shm wrappers
To see details of a given bug, visit
GENX_(__NR_rseq, sys_ni_syscall), // 386
+ LINX_(__NR_shmget, sys_shmget), // 395
+ LINX_(__NR_shmctl, sys_shmctl), // 396
+ LINX_(__NR_shmat, sys_shmat), // 397
+ LINX_(__NR_shmdt, sys_shmdt), // 398
+
LINXY(__NR_clock_gettime64, sys_clock_gettime64), // 403
LINX_(__NR_clock_settime64, sys_clock_settime64), // 404
scalar_supp.stderr.exp \
scalar_supp.vgtest scalar_supp.supp \
scalar_vfork.stderr.exp scalar_vfork.vgtest \
- scalar_openat2.vgtest scalar_openat2.stderr.exp
+ scalar_openat2.vgtest scalar_openat2.stderr.exp \
+ shm.vgtest shm.stderr.exp
check_PROGRAMS = \
bug133694 \
int3-x86 \
- scalar scalar_exit_group scalar_fork scalar_supp scalar_vfork
+ scalar scalar_exit_group scalar_fork scalar_supp scalar_vfork \
+ shm
if HAVE_OPENAT2
check_PROGRAMS += scalar_openat2
scalar_openat2_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
endif
scalar_supp_CFLAGS = $(AM_CFLAGS) @FLAG_W_NO_UNINITIALIZED@
+shm_CFLAGS = ${AM_CFLAGS} @FLAG_W_NO_UNINITIALIZED@
--- /dev/null
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include "../../memcheck.h"
+#include "scalar.h"
+
+int main(void)
+{
+ // uninitialised, but we know px[0] is 0x0
+ long* px = malloc(sizeof(long));
+ long x0 = px[0];
+ long res;
+
+ GO(__NR_shmget, "3s 0m");
+ SY(__NR_shmget, x0+IPC_PRIVATE, x0+1024, x0 | IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR); SUCC;
+
+ long id = res;
+
+ GO(__NR_shmat, "3s 0m");
+ SY(__NR_shmat, x0+id, x0, x0); SUCC;
+
+ void* mem = (void*)res;
+ struct shmid_ds buf;
+ VALGRIND_MAKE_MEM_NOACCESS(&buf, sizeof(buf));
+ GO(__NR_shmctl, "3s 0m");
+ SY(__NR_shmctl, x0+id, x0 | IPC_INFO, x0+&buf); SUCC;
+
+ GO(__NR_shmdt, "1s 0m");
+ SY(__NR_shmdt, x0+mem); SUCC;
+
+ SY(__NR_shmctl, id, IPC_RMID, NULL);
+}
--- /dev/null
+-----------------------------------------------------
+395: __NR_shmget 3s 0m
+-----------------------------------------------------
+Syscall param shmget(key) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:20)
+
+Syscall param shmget(size) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:20)
+
+Syscall param shmget(shmflg) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:20)
+
+-----------------------------------------------------
+397: __NR_shmat 3s 0m
+-----------------------------------------------------
+Syscall param shmat(shmid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:25)
+
+Syscall param shmat(shmaddr) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:25)
+
+Syscall param shmat(shmflg) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:25)
+
+-----------------------------------------------------
+396: __NR_shmctl 3s 0m
+-----------------------------------------------------
+Syscall param shmctl(shmid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:31)
+
+Syscall param shmctl(cmd) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:31)
+
+Syscall param shmctl(buf) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:31)
+
+Syscall param shmctl(IPC_INFO, buf) points to unaddressable byte(s)
+ ...
+ by 0x........: main (shm.c:31)
+ Address 0x........ is on thread 1's stack
+ in frame #1, created by main (shm.c:13)
+
+-----------------------------------------------------
+398: __NR_shmdt 1s 0m
+-----------------------------------------------------
+Syscall param shmdt(shmaddr) contains uninitialised byte(s)
+ ...
+ by 0x........: main (shm.c:34)
+
--- /dev/null
+prog: shm
+vgopts: -q