Prevent ltp/testcases/kernel/syscalls/setrlimit/setrlimit05 testcase
from crashing valgrind when passing 0xffffffffffff as ARG3 and then
trying to dereference it.
https://bugs.kde.org/show_bug.cgi?id=504341
501741 syscall cachestat not wrapped
503969 Make test results of make ltpchecks compatible with bunsen
504265 FreeBSD: missing syscall wrappers for fchroot and setcred
+504341 Valgrind killed by LTP syscall testcase setrlimit05
To see details of a given bug, visit
https://bugs.kde.org/show_bug.cgi?id=XXXXXX
if (ARG4)
PRE_MEM_WRITE( "rlimit64(old_rlim)", ARG4, sizeof(struct vki_rlimit64) );
- if (ARG3 &&
- ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur
- > ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_max) {
- SET_STATUS_Failure( VKI_EINVAL );
- }
- else if (ARG1 == 0 || ARG1 == VG_(getpid)()) {
+ if (ARG3) {
+ if (ML_(safe_to_deref)( (void*)(Addr)ARG3, sizeof(struct vki_rlimit64) )) {
+ if (((struct vki_rlimit64 *)(Addr)ARG3)->rlim_cur
+ > ((struct vki_rlimit64 *)(Addr)ARG3)->rlim_max) {
+ SET_STATUS_Failure( VKI_EINVAL );
+ }
+ }
+ } else if (ARG1 == 0 || ARG1 == VG_(getpid)()) {
switch (ARG2) {
case VKI_RLIMIT_NOFILE:
SET_STATUS_Success( 0 );