]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Bug 508778 - syscall-wrapper waitid warns about infop=null
authorMatthias Schwarzott <zzam@gentoo.org>
Sat, 23 Aug 2025 11:37:46 +0000 (13:37 +0200)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Fri, 29 Aug 2025 19:31:37 +0000 (21:31 +0200)
This is used by e.g. Qt:
https://github.com/qt/qtbase/blob/e17798560b107b7abd5f2cf472d942e8ac4213ff/src/3rdparty/forkfd/forkfd_linux.c#L128

NEWS
coregrind/m_syswrap/syswrap-linux.c
memcheck/tests/amd64-linux/scalar.c
memcheck/tests/amd64-linux/scalar.stderr.exp
memcheck/tests/x86-linux/scalar.c
memcheck/tests/x86-linux/scalar.stderr.exp

diff --git a/NEWS b/NEWS
index b3bce54003ddf3de30a4190bddf59118df07595b..0d6e10ee9072008796ff6a9ad7e5df35a32e5a40 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -88,6 +88,7 @@ are not entered into bugzilla tend to get forgotten about or ignored.
 508154  PRE(sys_fchownat) not handling VKI_AT_FDCWD
 508638  Self-hosting not working on FreeBSD
 508777  amd64-linux: add minimal scalar test
+508778  syscall-wrapper waitid warns about infop=null
 508869  x86-linux: simplify scalar test output
 
 To see details of a given bug, visit
index f5723f8cdaac8804e6d4345d0ce721f901d5435c..a740912f802ba0307939f94203b287dea118fb6d 100644 (file)
@@ -4087,13 +4087,15 @@ PRE(sys_waitid)
    PRE_REG_READ5(int32_t, "sys_waitid",
                  int, which, vki_pid_t, pid, struct vki_siginfo *, infop,
                  int, options, struct vki_rusage *, ru);
-   PRE_MEM_WRITE( "waitid(infop)", ARG3, sizeof(struct vki_siginfo) );
+   if (ARG3 != 0)
+      PRE_MEM_WRITE( "waitid(infop)", ARG3, sizeof(struct vki_siginfo) );
    if (ARG5 != 0)
       PRE_MEM_WRITE( "waitid(ru)", ARG5, sizeof(struct vki_rusage) );
 }
 POST(sys_waitid)
 {
-   POST_MEM_WRITE( ARG3, sizeof(struct vki_siginfo) );
+   if (ARG3 != 0)
+      POST_MEM_WRITE( ARG3, sizeof(struct vki_siginfo) );
    if (ARG5 != 0)
       POST_MEM_WRITE( ARG5, sizeof(struct vki_rusage) );
 }
index 703d46860d9e64424b89d990ba6c7656e72c8c83..5167fde2d773bd0e822d8696d205270b4ea76d02 100644 (file)
@@ -45,6 +45,13 @@ int main(void)
    GO(__NR_exit, "below");
    // (see below)
 
+  // __NR_waitid 247
+   GO(__NR_waitid, "5s 0m");
+   SY(__NR_waitid, x0, x0, x0, x0, x0); FAIL;
+
+   GO(__NR_waitid, "(infop,ru) 5s 2m");
+   SY(__NR_waitid, x0, x0, x0 + 1, x0, x0 + 1); FAIL;
+
     // no such syscall...
    GO(9999, "1e");
    SY(9999); FAIL;
index 8f7c3073c118a31d2da0050871f5f2a0bcf8f56e..12f6fcba374c8f9848da13e9243da90b2bf4e10b 100644 (file)
@@ -45,6 +45,62 @@ Syscall param write(buf) points to unaddressable byte(s)
 -----------------------------------------------------
  60:           __NR_exit below
 -----------------------------------------------------
+-----------------------------------------------------
+247:         __NR_waitid 5s 0m
+-----------------------------------------------------
+Syscall param sys_waitid(which) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(pid) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(infop) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(options) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(ru) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+-----------------------------------------------------
+247:         __NR_waitid (infop,ru) 5s 2m
+-----------------------------------------------------
+Syscall param sys_waitid(which) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(pid) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(infop) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(options) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(ru) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param waitid(infop) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param waitid(ru) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
 -----------------------------------------------------
 9999:                9999 1e
 -----------------------------------------------------
index fe36a47ef0f58d8f824983cafe90a8f6ed366347..5141f0496c087d26dce386f5c68d634428289198 100644 (file)
@@ -1272,6 +1272,13 @@ int main(void)
    GO(__NR_sys_kexec_load, "ni");
    SY(__NR_sys_kexec_load); FAIL;
 
+   // __NR_waitid 284
+   GO(__NR_waitid, "5s 0m");
+   SY(__NR_waitid, x0, x0, x0, x0, x0); FAIL;
+
+   GO(__NR_waitid, "(infop,ru) 5s 2m");
+   SY(__NR_waitid, x0, x0, x0 + 1, x0, x0 + 2); FAIL;
+
    // __NR_epoll_create1 329
    GO(__NR_epoll_create1, "1s 0m");
    SY(__NR_epoll_create1, x0); SUCC_OR_FAIL;
index c878e4465c170e1d912a1486d0f1eb8824f2e49b..b75507547026cd1580fa1b4e4fdd977030bed0d4 100644 (file)
@@ -4145,6 +4145,62 @@ Syscall param mq_getsetattr(omqstat) points to unaddressable byte(s)
 -----------------------------------------------------
 283: __NR_sys_kexec_load ni
 -----------------------------------------------------
+-----------------------------------------------------
+284:         __NR_waitid 5s 0m
+-----------------------------------------------------
+Syscall param sys_waitid(which) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(pid) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(infop) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(options) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(ru) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+-----------------------------------------------------
+284:         __NR_waitid (infop,ru) 5s 2m
+-----------------------------------------------------
+Syscall param sys_waitid(which) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(pid) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(infop) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(options) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param sys_waitid(ru) contains uninitialised byte(s)
+   ...
+   by 0x........: main (scalar.c)
+
+Syscall param waitid(infop) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param waitid(ru) points to unaddressable byte(s)
+   ...
+   by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
 -----------------------------------------------------
 329:  __NR_epoll_create1 1s 0m
 -----------------------------------------------------