508638 Self-hosting not working on FreeBSD
508777 amd64-linux: add minimal scalar test
508778 syscall-wrapper waitid warns about infop=null
+508779 PRE(sys_prlimit64): reorder check for memory validity
508869 x86-linux: simplify scalar test output
To see details of a given bug, visit
struct rlimit64 *, old_rlim);
if (ARG3) {
PRE_MEM_READ( "rlimit64(new_rlim)", ARG3, sizeof(struct vki_rlimit64) );
- if (!ML_(safe_to_deref)((void*)(Addr)ARG3, sizeof(struct vki_rlimit64))) {
- SET_STATUS_Failure(VKI_EFAULT);
- return;
- }
}
if (ARG4) {
PRE_MEM_WRITE( "rlimit64(old_rlim)", ARG4, sizeof(struct vki_rlimit64) );
- if (!ML_(safe_to_deref)((void*)(Addr)ARG4, sizeof(struct vki_rlimit64))) {
- SET_STATUS_Failure(VKI_EFAULT);
- return;
- }
+ }
+
+ if ((ARG3 && !ML_(safe_to_deref)((void*)(Addr)ARG3, sizeof(struct vki_rlimit64)))
+ || (ARG4 && !ML_(safe_to_deref)((void*)(Addr)ARG4, sizeof(struct vki_rlimit64)))) {
+ SET_STATUS_Failure(VKI_EFAULT);
+ return;
}
if (ARG3 &&
#include "../../memcheck.h"
#include "scalar.h"
#include <unistd.h>
+#include <sys/resource.h>
// Here we are trying to trigger every syscall error (scalar errors and
// memory errors) for every syscall. We do this by passing a lot of bogus
GO(__NR_exit, "below");
// (see below)
+ // __NR_getrlimit 97
+ GO(__NR_getrlimit, "2s 1m");
+ SY(__NR_getrlimit, x0, x0); FAIL;
+
+ // __NR_setrlimit 160
+ GO(__NR_setrlimit, "2s 1m");
+ SY(__NR_setrlimit, x0, x0); FAILx(EFAULT);
+
// __NR_waitid 247
GO(__NR_waitid, "5s 0m");
SY(__NR_waitid, x0, x0, x0, x0, x0); FAIL;
GO(__NR_waitid, "(infop,ru) 5s 2m");
SY(__NR_waitid, x0, x0, x0 + 1, x0, x0 + 1); FAIL;
+ // __NR_prlimit64 302
+ GO(__NR_prlimit64, "(nop) 4s 0m");
+ SY(__NR_prlimit64, x0, x0 + RLIMIT_NOFILE, x0, x0); SUCC;
+
+ GO(__NR_prlimit64, "(set) 4s 1m");
+ SY(__NR_prlimit64, x0, x0 + RLIMIT_NOFILE, x0 + 1, x0); FAILx(EFAULT);
+
+ GO(__NR_prlimit64, "(get) 4s 1m");
+ SY(__NR_prlimit64, x0, x0 + RLIMIT_NOFILE, x0, x0 + 1); FAILx(EFAULT);
+
+ GO(__NR_prlimit64, "(get+set) 4s 2m");
+ SY(__NR_prlimit64, x0, x0 + RLIMIT_NOFILE, x0 + 1, x0 + 1); FAILx(EFAULT);
+
// no such syscall...
GO(9999, "1e");
SY(9999); FAIL;
-----------------------------------------------------
60: __NR_exit below
-----------------------------------------------------
+-----------------------------------------------------
+ 97: __NR_getrlimit 2s 1m
+-----------------------------------------------------
+Syscall param getrlimit(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param getrlimit(rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param getrlimit(rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+-----------------------------------------------------
+160: __NR_setrlimit 2s 1m
+-----------------------------------------------------
+Syscall param setrlimit(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param setrlimit(rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param setrlimit(rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
-----------------------------------------------------
247: __NR_waitid 5s 0m
-----------------------------------------------------
by 0x........: main (scalar.c)
Address 0x........ is not stack'd, malloc'd or (recently) free'd
+-----------------------------------------------------
+302: __NR_prlimit64 (nop) 4s 0m
+-----------------------------------------------------
+Syscall param prlimit64(pid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(new_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(old_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+-----------------------------------------------------
+302: __NR_prlimit64 (set) 4s 1m
+-----------------------------------------------------
+Syscall param prlimit64(pid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(new_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(old_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param rlimit64(new_rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+-----------------------------------------------------
+302: __NR_prlimit64 (get) 4s 1m
+-----------------------------------------------------
+Syscall param prlimit64(pid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(new_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(old_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param rlimit64(old_rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+-----------------------------------------------------
+302: __NR_prlimit64 (get+set) 4s 2m
+-----------------------------------------------------
+Syscall param prlimit64(pid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(new_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(old_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param rlimit64(new_rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param rlimit64(old_rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
-----------------------------------------------------
9999: 9999 1e
-----------------------------------------------------
#include <signal.h>
#include <sys/mman.h> // MREMAP_FIXED
#include <sys/prctl.h>
+#include <sys/resource.h>
// Here we are trying to trigger every syscall error (scalar errors and
// memory errors) for every syscall. We do this by passing a lot of bogus
GO(__NR_epoll_create1, "1s 0m");
SY(__NR_epoll_create1, x0); SUCC_OR_FAIL;
+ // __NR_prlimit64 340
+ GO(__NR_prlimit64, "(nop) 4s 0m");
+ SY(__NR_prlimit64, x0, x0 + RLIMIT_NOFILE, x0, x0); SUCC;
+
+ GO(__NR_prlimit64, "(set) 4s 1m");
+ SY(__NR_prlimit64, x0, x0 + RLIMIT_NOFILE, x0 + 1, x0); FAILx(EFAULT);
+
+ GO(__NR_prlimit64, "(get) 4s 1m");
+ SY(__NR_prlimit64, x0, x0 + RLIMIT_NOFILE, x0, x0 + 1); FAILx(EFAULT);
+
+ GO(__NR_prlimit64, "(get+set) 4s 2m");
+ SY(__NR_prlimit64, x0, x0 + RLIMIT_NOFILE, x0 + 1, x0 + 1); FAILx(EFAULT);
+
// __NR_process_vm_readv 347
GO(__NR_process_vm_readv, "6s 2m");
SY(__NR_process_vm_readv, x0, x0, x0+1, x0, x0+1, x0); FAIL;
...
by 0x........: main (scalar.c)
+-----------------------------------------------------
+340: __NR_prlimit64 (nop) 4s 0m
+-----------------------------------------------------
+Syscall param prlimit64(pid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(new_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(old_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+-----------------------------------------------------
+340: __NR_prlimit64 (set) 4s 1m
+-----------------------------------------------------
+Syscall param prlimit64(pid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(new_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(old_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param rlimit64(new_rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+-----------------------------------------------------
+340: __NR_prlimit64 (get) 4s 1m
+-----------------------------------------------------
+Syscall param prlimit64(pid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(new_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(old_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param rlimit64(old_rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+-----------------------------------------------------
+340: __NR_prlimit64 (get+set) 4s 2m
+-----------------------------------------------------
+Syscall param prlimit64(pid) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(resource) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(new_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param prlimit64(old_rlim) contains uninitialised byte(s)
+ ...
+ by 0x........: main (scalar.c)
+
+Syscall param rlimit64(new_rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param rlimit64(old_rlim) points to unaddressable byte(s)
+ ...
+ by 0x........: main (scalar.c)
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
-----------------------------------------------------
347:__NR_process_vm_readv 6s 2m
-----------------------------------------------------