]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
FreeBSD syscall: add ML_(fd_allowed) check for fstat
authorPaul Floyd <pjfloyd@wanadoo.fr>
Fri, 5 Sep 2025 06:21:32 +0000 (08:21 +0200)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Fri, 5 Sep 2025 06:21:32 +0000 (08:21 +0200)
Also PRE(sys_cap_rights_get) was checking the wrong arg
with ML_(fd_allowed). ARG1 is a version number in the
syscall, ARG2 is the fd.

coregrind/m_syswrap/syswrap-freebsd.c

index 0c68acdc8fd9487d9d2ae10e6f46cd641ffab87e..594298420722e485eb359f34ca5780b9ee07e5bc 100644 (file)
@@ -5691,7 +5691,7 @@ PRE(sys_cap_rights_get)
 {
    PRINT("sys_cap_rights_get ( %" FMT_REGWORD "d, %" FMT_REGWORD "d, %#" FMT_REGWORD "x )", SARG1, SARG2, ARG3);
    PRE_REG_READ3(long, "cap_rights_get", int, version, int, fd, vki_cap_rights_t*, rights);
-   if (!ML_(fd_allowed)(ARG1, "cap_rights_get", tid, False))
+   if (!ML_(fd_allowed)(ARG2, "cap_rights_get", tid, False))
       SET_STATUS_Failure(VKI_EBADF);
    PRE_MEM_WRITE("cap_rights_get(rights)", ARG3, sizeof(vki_cap_rights_t));
 }
@@ -6301,6 +6301,8 @@ PRE(sys_fstat)
    PRINT("sys_fstat ( %" FMT_REGWORD "d, %#" FMT_REGWORD "x )",SARG1,ARG2);
    PRE_REG_READ2(int, "fstat", int, fd, struct stat *, sb);
    PRE_MEM_WRITE( "fstat(sb)", ARG2, sizeof(struct vki_stat) );
+   if ( !ML_(fd_allowed)(ARG1, "fstat", tid, False) )
+      SET_STATUS_Failure( VKI_EBADF );
 }
 
 POST(sys_fstat)