Add a call to ML_(fd_allowed) in the PRE handler of fcntl and fcntl64
and block syscalls with EBADF when the file descriptor isn't allowed
to be used by the program.
https://bugs.kde.org/show_bug.cgi?id=337388
valgrind: vex x86->IR: unhandled instruction bytes:
0x66 0xF 0x3A 0x2
311655 --log-file=FILE leads to apparent fd leak
+337388 fcntl works on Valgrind's own file descriptors
377966 arm64 unhandled instruction dc zva392146 aarch64: unhandled
instruction 0xD5380001 (MRS rT, midr_el1)
392146 aarch64: unhandled instruction 0xD5380001 (MRS rT, midr_el1)
if (ARG2 == VKI_F_SETLKW)
# endif
*flags |= SfMayBlock;
+
+ if (!ML_(fd_allowed)(ARG1, "fcntl", tid, False)) {
+ SET_STATUS_Failure (VKI_EBADF);
+ }
}
POST(sys_fcntl)
if (ARG2 == VKI_F_SETLKW)
# endif
*flags |= SfMayBlock;
+
+ if (!ML_(fd_allowed)(ARG1, "fcntl64", tid, False)) {
+ SET_STATUS_Failure (VKI_EBADF);
+ }
}
POST(sys_fcntl64)