From: Tom Hughes Date: Mon, 10 Nov 2014 09:55:59 +0000 (+0000) Subject: Add support for the getrandom system call. BZ#340788. X-Git-Tag: svn/VALGRIND_3_11_0~839 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8308dd7566e570bece15178dd7ff04be31702f0;p=thirdparty%2Fvalgrind.git Add support for the getrandom system call. BZ#340788. Requires r14705 for updated system call lists. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14709 --- diff --git a/NEWS b/NEWS index 62607f8fd8..4bcf9293e7 100644 --- a/NEWS +++ b/NEWS @@ -67,6 +67,7 @@ where XXXXXX is the bug number as listed below. 340509 arm64: unhandled instruction fcvtas 340630 arm64: fchmod (52) and fchown (55) syscalls not recognized 340632 arm64: unhandled instruction fcvtas +340788 warning: unhandled syscall: 318 (getrandom) n-i-bz Provide implementations of certain compiler builtins to support compilers who may not provide those n-i-bz Old STABS code is still being compiled, but never used. Remove it. diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index f7b6b90792..22c6c983d9 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -283,6 +283,9 @@ DECL_TEMPLATE(linux, sys_process_vm_writev); DECL_TEMPLATE(linux, sys_fanotify_init); DECL_TEMPLATE(linux, sys_fanotify_mark); +// Linux-specific (new in Linux 3.17) +DECL_TEMPLATE(linux, sys_getrandom); + /* --------------------------------------------------------------------- Wrappers for sockets and ipc-ery. These are split into standalone procedures because x86-linux hides them inside multiplexors diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 92148a88ed..364a8bb9cf 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -1061,7 +1061,18 @@ static SyscallTableEntry syscall_table[] = { LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 310 LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 311 - LINX_(__NR_kcmp, sys_kcmp) // 312 + LINX_(__NR_kcmp, sys_kcmp), // 312 +// LIN__(__NR_finit_module, sys_ni_syscall), // 313 +// LIN__(__NR_sched_setattr, sys_ni_syscall), // 314 + +// LIN__(__NR_sched_getattr, sys_ni_syscall), // 315 +// LIN__(__NR_renameat2, sys_ni_syscall), // 316 +// LIN__(__NR_seccomp, sys_ni_syscall), // 317 + LINXY(__NR_getrandom, sys_getrandom) // 318 +// LIN__(__NR_memfd_create, sys_ni_syscall), // 319 + +// LIN__(__NR_kexec_file_load, sys_ni_syscall), // 320 +// LIN__(__NR_bpf, sys_ni_syscall) // 321 }; SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index baa6380f27..f9f8dd42b0 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -1215,7 +1215,8 @@ static SyscallTableEntry syscall_main_table[] = { LINXY(__NR_name_to_handle_at, sys_name_to_handle_at),// 370 LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 371 LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 372 - LINXY(__NR_sendmmsg, sys_sendmmsg) // 374 + LINXY(__NR_sendmmsg, sys_sendmmsg), // 374 + LINXY(__NR_getrandom, sys_getrandom) // 384 }; diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c index f8a59c1aac..59e1cf6fff 100644 --- a/coregrind/m_syswrap/syswrap-arm64-linux.c +++ b/coregrind/m_syswrap/syswrap-arm64-linux.c @@ -1034,6 +1034,7 @@ static SyscallTableEntry syscall_main_table[] = { LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 270 LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 271 + LINXY(__NR_getrandom, sys_getrandom), // 278 // The numbers below are bogus. (See comment further down.) // When pulling entries above this line, change the numbers diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index d3064f2377..d63010006d 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -3004,6 +3004,19 @@ POST(sys_move_pages) POST_MEM_WRITE(ARG5, ARG2 * sizeof(int)); } +PRE(sys_getrandom) +{ + PRINT("sys_getrandom ( %#lx, %ld, %ld )" , ARG1,ARG2,ARG3); + PRE_REG_READ3(int, "getrandom", + char *, buf, vki_size_t, count, unsigned int, flags); + PRE_MEM_WRITE( "getrandom(cpu)", ARG1, ARG2 ); +} + +POST(sys_getrandom) +{ + POST_MEM_WRITE( ARG1, ARG2 ); +} + /* --------------------------------------------------------------------- utime wrapper ------------------------------------------------------------------ */ diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c index 5888841d76..0f5359c204 100644 --- a/coregrind/m_syswrap/syswrap-mips32-linux.c +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c @@ -1116,7 +1116,9 @@ static SyscallTableEntry syscall_main_table[] = { LINXY (__NR_clock_adjtime, sys_clock_adjtime), // 341 //.. LINXY (__NR_process_vm_readv, sys_process_vm_readv), // 345 - LINX_ (__NR_process_vm_writev, sys_process_vm_writev) // 346 + LINX_ (__NR_process_vm_writev, sys_process_vm_writev), // 346 + //.. + LINXY(__NR_getrandom, sys_getrandom) // 353 }; SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno) diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c index c1154a2a15..34ea581fbe 100644 --- a/coregrind/m_syswrap/syswrap-mips64-linux.c +++ b/coregrind/m_syswrap/syswrap-mips64-linux.c @@ -909,7 +909,8 @@ static SyscallTableEntry syscall_main_table[] = { LINXY (__NR_prlimit64, sys_prlimit64), LINXY (__NR_clock_adjtime, sys_clock_adjtime), LINXY (__NR_process_vm_readv, sys_process_vm_readv), - LINX_ (__NR_process_vm_writev, sys_process_vm_writev) + LINX_ (__NR_process_vm_writev, sys_process_vm_writev), + LINXY(__NR_getrandom, sys_getrandom) }; SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno ) diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 2e5436d75b..5c058c2815 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -1236,8 +1236,6 @@ static SyscallTableEntry syscall_table[] = { LINX_(__NR_pwritev, sys_pwritev), // 321 LINXY(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo),// 322 - LINX_(__NR_clock_adjtime, sys_clock_adjtime), // 347 - LINXY(__NR_socket, sys_socket), // 326 LINX_(__NR_bind, sys_bind), // 327 LINX_(__NR_connect, sys_connect), // 328 @@ -1255,8 +1253,12 @@ static SyscallTableEntry syscall_table[] = { LINXY(__NR_accept4, sys_accept4), // 344 + LINX_(__NR_clock_adjtime, sys_clock_adjtime), // 347 + LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 - LINX_(__NR_process_vm_writev, sys_process_vm_writev) // 352 + LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352 + + LINXY(__NR_getrandom, sys_getrandom) // 359 }; SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index d775f9bd0e..c173593439 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -1155,7 +1155,9 @@ static SyscallTableEntry syscall_table[] = { LINXY(__NR_clock_adjtime, sys_clock_adjtime), // 347 LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 351 - LINX_(__NR_process_vm_writev, sys_process_vm_writev) // 352 + LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352 + + LINXY(__NR_getrandom, sys_getrandom) // 359 }; SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c index 1152b3b001..344b614447 100644 --- a/coregrind/m_syswrap/syswrap-s390x-linux.c +++ b/coregrind/m_syswrap/syswrap-s390x-linux.c @@ -1043,12 +1043,16 @@ static SyscallTableEntry syscall_table[] = { LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 340 LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 341 // ?????(__NR_s390_runtime_instr, ), // 342 - LINX_(__NR_kcmp, sys_kcmp) // 343 + LINX_(__NR_kcmp, sys_kcmp), // 343 // ?????(__NR_finit_module, ), // 344 // ?????(__NR_sched_setattr, ), // 345 // ?????(__NR_sched_getattr, ), // 346 // ?????(__NR_renameat2, ), // 347 +// ?????(__NR_seccomp, ), // 348 + LINXY(__NR_getrandom, sys_getrandom) // 349 + +// ?????(__NR_memfd_create, ), // 350 }; SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno ) diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 8271b42e3f..dcbf4251e3 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -1813,7 +1813,17 @@ static SyscallTableEntry syscall_table[] = { // LINX_(__NR_setns, sys_ni_syscall), // 346 LINXY(__NR_process_vm_readv, sys_process_vm_readv), // 347 LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 348 - LINX_(__NR_kcmp, sys_kcmp) // 349 + LINX_(__NR_kcmp, sys_kcmp), // 349 + +// LIN__(__NR_finit_module, sys_ni_syscall), // 350 +// LIN__(__NR_sched_setattr, sys_ni_syscall), // 351 +// LIN__(__NR_sched_getattr, sys_ni_syscall), // 352 +// LIN__(__NR_renameat2, sys_ni_syscall), // 353 +// LIN__(__NR_seccomp, sys_ni_syscall), // 354 + + LINXY(__NR_getrandom, sys_getrandom) // 355 +// LIN__(__NR_memfd_create, sys_ni_syscall), // 356 +// LIN__(__NR_bpf, sys_ni_syscall) // 357 }; SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )