507721 Wire up illumos and Solaris mallinfo
507853 faccessat and faccessat2 should handle AT_FDCWD and absolute paths
507868 futimesat doesn't handle AT_FDCWD
+507869 Various at syscalls don't check dirfd argument
507873 Make fchmodat and fchmodat2 syscall wrappers accept AT_FDCWD
507897 Allow for patching LTP sources
507970 -Wcalloc-transposed-args warnings in valgrind-di-server.c
SARG1, ARG2, (HChar*)ARG2, ARG3);
PRE_REG_READ3(long, "fstatat64",
int, dfd, char *, file_name, struct stat64 *, buf);
+ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 )
+ && *(Char *)(Addr)ARG2 != '/'
+ && ((Int)ARG1) != ((Int)VKI_AT_FDCWD)
+ && !ML_(fd_allowed)(ARG1, "fstatat64", tid, False))
+ SET_STATUS_Failure( VKI_EBADF );
PRE_MEM_RASCIIZ( "fstatat64(file_name)", ARG2 );
PRE_MEM_WRITE( "fstatat64(buf)", ARG3, sizeof(struct vki_stat64) );
}
int, olddfd, const char *, oldpath,
int, newdfd, const char *, newpath,
unsigned int, flags);
+ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 )
+ && *(Char *)(Addr)ARG2 != '/'
+ && ((Int)ARG1) != ((Int)VKI_AT_FDCWD)
+ && !ML_(fd_allowed)(ARG1, "renameat2(olddfd)", tid, False))
+ SET_STATUS_Failure( VKI_EBADF );
+ if (ML_(safe_to_deref)( (void*)(Addr)ARG4, 1 )
+ && *(Char *)(Addr)ARG4 != '/'
+ && ((Int)ARG3) != ((Int)VKI_AT_FDCWD)
+ && !ML_(fd_allowed)(ARG3, "renameat2(newsfd)", tid, False))
+ SET_STATUS_Failure( VKI_EBADF );
+
PRE_MEM_RASCIIZ( "renameat2(oldpath)", ARG2 );
PRE_MEM_RASCIIZ( "renameat2(newpath)", ARG4 );
}
SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
PRE_REG_READ4(long, "fstatat64",
int, dfd, char *, file_name, struct stat64 *, buf, int, flags);
+ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 )
+ && *(Char *)(Addr)ARG2 != '/'
+ && ((Int)ARG1) != ((Int)VKI_AT_FDCWD)
+ && !ML_(fd_allowed)(ARG1, "fstatat64", tid, False))
+ SET_STATUS_Failure( VKI_EBADF );
PRE_MEM_RASCIIZ ("fstatat64(file_name)", ARG2);
PRE_MEM_WRITE ("fstatat64(buf)", ARG3, sizeof (struct vki_stat64));
}
ARG3);
PRE_REG_READ3(long, "fstatat64",
int, dfd, char *, file_name, struct stat64 *, buf);
+ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 )
+ && *(Char *)(Addr)ARG2 != '/'
+ && ((Int)ARG1) != ((Int)VKI_AT_FDCWD)
+ && !ML_(fd_allowed)(ARG1, "fstatat64", tid, False))
+ SET_STATUS_Failure( VKI_EBADF );
PRE_MEM_RASCIIZ( "fstatat64(file_name)", ARG2 );
PRE_MEM_WRITE( "fstatat64(buf)", ARG3, sizeof(struct vki_stat64) );
}
SARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
PRE_REG_READ4(long, "fstatat64",
int, dfd, char *, file_name, struct stat64 *, buf, int, flags);
+ if (ML_(safe_to_deref)( (void*)(Addr)ARG2, 1 )
+ && *(Char *)(Addr)ARG2 != '/'
+ && ((Int)ARG1) != ((Int)VKI_AT_FDCWD)
+ && !ML_(fd_allowed)(ARG1, "fstatat64", tid, False))
+ SET_STATUS_Failure( VKI_EBADF );
PRE_MEM_RASCIIZ( "fstatat64(file_name)", ARG2 );
PRE_MEM_WRITE( "fstatat64(buf)", ARG3, sizeof(struct vki_stat64) );
}