From: Nicholas Nethercote Date: Fri, 12 Nov 2004 19:55:08 +0000 (+0000) Subject: converted some more X-Git-Tag: svn/VALGRIND_3_0_0~1336 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=66213608e72b59fc28b9d5349e241fc584adb620;p=thirdparty%2Fvalgrind.git converted some more git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2976 --- diff --git a/coregrind/vg_syscalls.c b/coregrind/vg_syscalls.c index 90b4df0ca2..6c14bcb19c 100644 --- a/coregrind/vg_syscalls.c +++ b/coregrind/vg_syscalls.c @@ -1649,10 +1649,10 @@ PRE(setfsgid) PRINT("setfsgid ( %d )", arg1); } -PRE(setregid) +PREx(sys_setregid16, 0) { - /* int setregid(gid_t rgid, gid_t egid); */ - PRINT("setregid ( %d, %d )", arg1, arg2); + PRINT("sys_setregid16 ( %d, %d )", arg1, arg2); + PRE_REG_READ2(long, "setregid16", vki_old_gid_t, rgid, vki_old_gid_t, egid); } PRE(setresuid) @@ -4528,10 +4528,10 @@ POST(sys_setpgid) VG_(main_pgrp) = VG_(getpgrp)(); } -PRE(setregid32) +PREx(sys_setregid, 0) { - /* int setregid(gid_t rgid, gid_t egid); */ - PRINT("setregid32(?) ( %d, %d )", arg1, arg2); + PRINT("sys_setregid ( %d, %d )", arg1, arg2); + PRE_REG_READ2(long, "setregid", vki_gid_t, rgid, vki_gid_t, egid); } PRE(setresuid32) @@ -4540,18 +4540,25 @@ PRE(setresuid32) PRINT("setresuid32(?) ( %d, %d, %d )", arg1, arg2, arg3); } -PRE(setreuid) +PREx(sys_setreuid16, 0) { - /* int setreuid(uid_t ruid, uid_t euid); */ - PRINT("setreuid ( 0x%x, 0x%x )", arg1, arg2); + PRINT("setreuid16 ( 0x%x, 0x%x )", arg1, arg2); + PRE_REG_READ2(long, "setreuid16", vki_old_uid_t, ruid, vki_old_uid_t, euid); +} + +PREx(sys_setreuid, 0) +{ + PRINT("sys_setreuid ( 0x%x, 0x%x )", arg1, arg2); + PRE_REG_READ2(long, "setreuid", vki_uid_t, ruid, vki_uid_t, euid); } PREALIAS(setreuid32, setreuid); -PRE(setrlimit) +PREx(sys_setrlimit, 0) { - /* int setrlimit (int resource, const struct rlimit *rlim); */ - PRINT("setrlimit ( %d, %p )", arg1,arg2); + PRINT("sys_setrlimit ( %d, %p )", arg1,arg2); + PRE_REG_READ2(long, "setrlimit", + unsigned int, resource, struct rlimit *, rlim); PRE_MEM_READ( "setrlimit(rlim)", arg2, sizeof(struct vki_rlimit) ); if (arg1 == VKI_RLIMIT_NOFILE) { @@ -5403,20 +5410,20 @@ POST(sigprocmask) PREALIAS(rt_sigprocmask, sigprocmask); POSTALIAS(rt_sigprocmask, sigprocmask); -PRE(sigpending) +PREx(sys_sigpending, NBRunInLWP) { - /* int sigpending( sigset_t *set ) ; */ - PRINT( "sigpending ( %p )", arg1 ); - PRE_MEM_WRITE( "sigpending(set)", arg1, sizeof(vki_sigset_t)); + PRINT( "sys_sigpending ( %p )", arg1 ); + PRE_REG_READ1(long, "sigpending", vki_old_sigset_t *, set); + PRE_MEM_WRITE( "sigpending(set)", arg1, sizeof(vki_old_sigset_t)); } -POST(sigpending) +POST(sys_sigpending) { - POST_MEM_WRITE( arg1, sizeof( vki_sigset_t ) ) ; + POST_MEM_WRITE( arg1, sizeof( vki_old_sigset_t ) ) ; } -PREALIAS(rt_sigpending, sigpending); -POSTALIAS(rt_sigpending, sigpending); +PREALIAS(rt_sigpending, sys_sigpending); +POSTALIAS(rt_sigpending, sys_sigpending); PRE(io_setup) { @@ -5902,13 +5909,13 @@ static const struct sys_info sys_info[] = { // (__NR_sgetmask, sys_sgetmask), // 68 * (ANSI C) // (__NR_ssetmask, sys_ssetmask), // 69 * (ANSI C) - SYSB_(setreuid, 0), // 70 sys_setreuid16 ## - SYSB_(setregid, 0), // 71 sys_setregid16 ## + SYSX_(__NR_setreuid, sys_setreuid16), // 70 ## (BSD4.3) + SYSX_(__NR_setregid, sys_setregid16), // 71 ## (BSD4.3) SYSB_(sigsuspend, MayBlock), // 72 sys_sigsuspend - SYSBA(sigpending, NBRunInLWP), // 73 sys_sigpending * + SYSXY(__NR_sigpending, sys_sigpending), // 73 * P // (__NR_sethostname, sys_sethostname), // 74 * (almost P) - SYSB_(setrlimit, 0), // 75 sys_setrlimit * + SYSX_(__NR_setrlimit, sys_setrlimit), // 75 * (SVr4,BSD4.3) SYSBA(getrlimit, 0), // 76 sys_old_getrlimit * SYSBA(getrusage, 0), // 77 sys_getrusage * SYSBA(gettimeofday, 0), // 78 sys_gettimeofday * @@ -6059,13 +6066,13 @@ static const struct sys_info sys_info[] = { SYSBA(lstat64, 0), // 196 sys_lstat64 %% SYSBA(fstat64, 0), // 197 sys_fstat64 %% SYSB_(lchown32, 0), // 198 sys_lchown * - SYSX_(__NR_getuid32, sys_getuid), // 199 * + SYSX_(__NR_getuid32, sys_getuid), // 199 * - SYSX_(__NR_getgid32, sys_getgid), // 200 * - SYSX_(__NR_geteuid32, sys_geteuid), // 201 * - SYSX_(__NR_getegid32, sys_getegid), // 202 * - SYSB_(setreuid32, 0), // 203 sys_setreuid * - SYSB_(setregid32, 0), // 204 sys_setregid * + SYSX_(__NR_getgid32, sys_getgid), // 200 * + SYSX_(__NR_geteuid32, sys_geteuid), // 201 * + SYSX_(__NR_getegid32, sys_getegid), // 202 * + SYSX_(__NR_setreuid32, sys_setreuid), // 203 * (BSD4.3) + SYSX_(__NR_setregid32, sys_setregid), // 204 * (BSD4.3) SYSBA(getgroups32, 0), // 205 sys_getgroups * SYSB_(setgroups32, 0), // 206 sys_setgroups * diff --git a/include/x86-linux/vki_arch.h b/include/x86-linux/vki_arch.h index e27542fd63..aed2b725ad 100644 --- a/include/x86-linux/vki_arch.h +++ b/include/x86-linux/vki_arch.h @@ -88,6 +88,8 @@ typedef __vki_restorefn_t __user *__vki_sigrestore_t; #define _VKI_NSIG_BPW 32 #define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW) +typedef unsigned long vki_old_sigset_t; /* at least 32 bits */ + typedef struct { unsigned long sig[_VKI_NSIG_WORDS]; } vki_sigset_t; diff --git a/memcheck/tests/scalar.c b/memcheck/tests/scalar.c index 18bae91040..9ee9e14743 100644 --- a/memcheck/tests/scalar.c +++ b/memcheck/tests/scalar.c @@ -272,7 +272,7 @@ int main(void) GO(__NR_setsid, "0e"); SY(__NR_setsid); - // __NR_sigaction 67 + // __NR_sigaction 67 --> sys_sigaction() GO(__NR_sigaction, "3s 2m"); SY(__NR_sigaction, x0, x0+1, x0+1); @@ -282,15 +282,27 @@ int main(void) // __NR_ssetmask 69 // (Not yet handled by Valgrind) - // __NR_setreuid 70 - // __NR_setregid 71 - // __NR_sigsuspend 72 - // __NR_sigpending 73 + // __NR_setreuid 70 --> sys_setreuid16() + GO(__NR_setreuid, "2s 0m"); + SY(__NR_setreuid, x0, x0); + + // __NR_setregid 71 --> sys_setregid16() + GO(__NR_setregid, "2s 0m"); + SY(__NR_setregid, x0, x0); + + // __NR_sigsuspend 72 --> sys_sigsuspend() + + // __NR_sigpending 73 --> sys_sigpending() + GO(__NR_sigpending, "1s 1m"); + SY(__NR_sigpending, x0); // __NR_sethostname 74 // (Not yet handled by Valgrind) - // __NR_setrlimit 75 + // __NR_setrlimit 75 --> sys_setrlimit() + GO(__NR_setrlimit, "2s 1m"); + SY(__NR_setrlimit, x0, x0); + // __NR_getrlimit 76 // __NR_getrusage 77 // __NR_gettimeofday 78 @@ -478,7 +490,13 @@ int main(void) SY(__NR_getegid32); // __NR_setreuid32 203 + GO(__NR_setreuid32, "2s 0m"); + SY(__NR_setreuid32, x0, x0); + // __NR_setregid32 204 + GO(__NR_setregid32, "2s 0m"); + SY(__NR_setregid32, x0, x0); + // __NR_getgroups32 205 // __NR_setgroups32 206 // __NR_fchown32 207 diff --git a/memcheck/tests/scalar.stderr.exp b/memcheck/tests/scalar.stderr.exp index c86c37dd1d..db4aafc0cc 100644 --- a/memcheck/tests/scalar.stderr.exp +++ b/memcheck/tests/scalar.stderr.exp @@ -768,6 +768,65 @@ Syscall param sigaction(oldact) points to unaddressable byte(s) by 0x........: __libc_start_main (...libc...) by 0x........: ... Address 0x........ is not stack'd, malloc'd or (recently) free'd +----------------------------------------------------- + 70: __NR_setreuid 2s 0m +----------------------------------------------------- + +Syscall param setreuid16(ruid) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... + +Syscall param setreuid16(euid) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... +----------------------------------------------------- + 71: __NR_setregid 2s 0m +----------------------------------------------------- + +Syscall param setregid16(rgid) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... + +Syscall param setregid16(egid) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... +----------------------------------------------------- + 73: __NR_sigpending 1s 1m +----------------------------------------------------- + +Syscall param sigpending(set) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... + +Syscall param sigpending(set) points to unaddressable byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... + Address 0x........ is not stack'd, malloc'd or (recently) free'd +----------------------------------------------------- + 75: __NR_setrlimit 2s 1m +----------------------------------------------------- + +Syscall param setrlimit(resource) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... + +Syscall param setrlimit(rlim) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... + +Syscall param setrlimit(rlim) points to unaddressable byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... + Address 0x........ is not stack'd, malloc'd or (recently) free'd ----------------------------------------------------- 111: __NR_vhangup 0e ----------------------------------------------------- @@ -816,6 +875,32 @@ Syscall param uname(buf) points to unaddressable byte(s) 202: __NR_getegid32 0e ----------------------------------------------------- ----------------------------------------------------- +203: __NR_setreuid32 2s 0m +----------------------------------------------------- + +Syscall param setreuid(ruid) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... + +Syscall param setreuid(euid) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... +----------------------------------------------------- +204: __NR_setregid32 2s 0m +----------------------------------------------------- + +Syscall param setregid(rgid) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... + +Syscall param setregid(egid) contains uninitialised byte(s) + at 0x........: syscall (in /...libc...) + by 0x........: __libc_start_main (...libc...) + by 0x........: ... +----------------------------------------------------- 213: __NR_setuid32 1s 0m -----------------------------------------------------