From: Paul Floyd Date: Sun, 17 Mar 2024 06:41:42 +0000 (+0100) Subject: Bug 483786 -- Incorrect parameter indexing in FreeBSD clock_nanosleep syscall wrapper X-Git-Tag: VALGRIND_3_23_0~101 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8d8e4a889cc3a02a5c04e5c4f23f9a191b0a6726;p=thirdparty%2Fvalgrind.git Bug 483786 -- Incorrect parameter indexing in FreeBSD clock_nanosleep syscall wrapper --- diff --git a/.gitignore b/.gitignore index 126c2e5e4..e9c302de7 100644 --- a/.gitignore +++ b/.gitignore @@ -1377,6 +1377,7 @@ /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 27a6dfa3b..20bb0e2d8 100644 --- 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 diff --git a/coregrind/m_syswrap/syswrap-freebsd.c b/coregrind/m_syswrap/syswrap-freebsd.c index bf4d7e581..43c242806 100644 --- a/coregrind/m_syswrap/syswrap-freebsd.c +++ b/coregrind/m_syswrap/syswrap-freebsd.c @@ -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) ); } } diff --git a/memcheck/tests/freebsd/Makefile.am b/memcheck/tests/freebsd/Makefile.am index 99b971dc6..2608724f4 100644 --- a/memcheck/tests/freebsd/Makefile.am +++ b/memcheck/tests/freebsd/Makefile.am @@ -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 \ diff --git a/memcheck/tests/freebsd/scalar.c b/memcheck/tests/freebsd/scalar.c index 463fee361..978c11627 100644 --- a/memcheck/tests/freebsd/scalar.c +++ b/memcheck/tests/freebsd/scalar.c @@ -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