]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Bug 483786 -- Incorrect parameter indexing in FreeBSD clock_nanosleep syscall wrapper
authorPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 17 Mar 2024 06:41:42 +0000 (07:41 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Sun, 17 Mar 2024 06:41:42 +0000 (07:41 +0100)
.gitignore
NEWS
coregrind/m_syswrap/syswrap-freebsd.c
memcheck/tests/freebsd/Makefile.am
memcheck/tests/freebsd/scalar.c

index 126c2e5e4e98c2f91c45c38f99372e2cb9a81a01..e9c302de730905b03d97d99cbe7558f20054f95b 100644 (file)
 /memcheck/tests/freebsd/aligned_alloc
 /memcheck/tests/freebsd/bug464476
 /memcheck/tests/freebsd/bug470713
+/memcheck/tests/freebsd/bug483786
 /memcheck/tests/freebsd/capsicum
 /memcheck/tests/freebsd/chflags
 /memcheck/tests/freebsd/chmod_chown
diff --git a/NEWS b/NEWS
index 27a6dfa3b2bbf04e9e289a6554bc4fb5b3b76a23..20bb0e2d8dac91180cb36a68c2f36394c0bbad87 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -69,6 +69,7 @@ are not entered into bugzilla tend to get forgotten about or ignored.
 480488  Add support for FreeBSD 13.3
 480706  Unhandled syscall 325 (mlock2)
 481131  [PATCH] x86 regtest: fix clobber lists in generated asm statements
+483786  Incorrect parameter indexing in FreeBSD clock_nanosleep syscall wrapper
 n-i-bz  Add redirect for memccpy
 
 To see details of a given bug, visit
index bf4d7e58184efe11370ea7165518227b96759ecc..43c242806edb4b2491eeb2ae3984c7686c42f160 100644 (file)
@@ -2526,18 +2526,18 @@ PRE(sys_clock_nanosleep)
    *flags |= SfMayBlock|SfPostOnFail;
    PRINT("sys_clock_nanosleep ( %" FMT_REGWORD "d, %" FMT_REGWORD "d, %#" FMT_REGWORD "x, %#" FMT_REGWORD "x )",
          SARG1, SARG2, ARG3, ARG4);
-   PRE_REG_READ4(int, "clock_nanosleep", clockid_t, clock_id, int, flags,
+   PRE_REG_READ4(int, "clock_nanosleep", vki_clockid_t, clock_id, int, flags,
                  const struct timespec *, rqtp, struct timespec *, rmtp);
-   PRE_MEM_READ("clock_nanosleep(rqtp)", ARG1, sizeof(struct vki_timespec));
-   if (ARG2 != 0) {
-      PRE_MEM_WRITE( "clock_nanosleep(rmtp)", ARG2, sizeof(struct vki_timespec) );
+   PRE_MEM_READ("clock_nanosleep(rqtp)", ARG3, sizeof(struct vki_timespec));
+   if (ARG4 != 0) {
+      PRE_MEM_WRITE( "clock_nanosleep(rmtp)", ARG4, sizeof(struct vki_timespec) );
    }
 }
 
 POST(sys_clock_nanosleep)
 {
-   if (ARG2 != 0) {
-      POST_MEM_WRITE( ARG2, sizeof(struct vki_timespec) );
+   if (ARG4 != 0 && FAILURE && ERR == VKI_EINTR) {
+      POST_MEM_WRITE( ARG4, sizeof(struct vki_timespec) );
    }
 }
 
index 99b971dc6d453ff6a57687fb34b391c1e0dac53b..2608724f4b777713386ec3780d1b76fff1ef0b0f 100644 (file)
@@ -28,6 +28,7 @@ EXTRA_DIST = \
        bug464476_rel_symlink.stdout.exp \
        bug470713.vgtest bug470713.stderr.exp \
                bug470713.stdout.exp \
+       bug483786.vgtest bug483786.stderr.exp \
        capsicum.vgtest \
        capsicum.stderr.exp \
        chflags.vgtest\
@@ -137,6 +138,7 @@ EXTRA_DIST = \
 
 check_PROGRAMS = \
        access aio aio_read aligned_alloc bug464476 bug470713 \
+       bug483786 \
        capsicum chflags \
        chmod_chown delete_sized_mismatch errno_aligned_allocs \
        extattr \
index 463fee36176416cdbe207957f5f45c311cbcb36e..978c116278ff2f83f106bb53b00ea9a5ae055979 100644 (file)
@@ -897,9 +897,8 @@ int main(void)
 
 #if (FREEBSD_VERS >= FREEBSD_11)
    /* SYS_clock_nanosleep         244 */
-   /* this succeeds ? */
    GO(SYS_clock_nanosleep, "4s 2m");
-   SY(SYS_clock_nanosleep, x0+5000, x0+3000, x0, x0+1); SUCC;
+   SY(SYS_clock_nanosleep, x0+5000, x0+3000, x0+3, x0+1); SUCC;
 #endif
 
    // SYS_clock_getcpuclockid2                             247