From 0080aa836896502e7f3ea897f1aa604693289e3c Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Fri, 10 Feb 2012 11:48:01 +0000 Subject: [PATCH] It turns out sendmmsg also updates the msg_len fields. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12377 --- coregrind/m_syswrap/syswrap-amd64-linux.c | 2 +- coregrind/m_syswrap/syswrap-linux.c | 15 +++++++++++++++ coregrind/m_syswrap/syswrap-x86-linux.c | 2 +- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 5b8d83fca9..3e60913912 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -1421,7 +1421,7 @@ static SyscallTableEntry syscall_table[] = { // LINX_(__NR_clock_adjtime, sys_ni_syscall), // 305 // LINX_(__NR_syncfs, sys_ni_syscall), // 306 - LINX_(__NR_sendmmsg, sys_sendmmsg), // 307 + LINXY(__NR_sendmmsg, sys_sendmmsg), // 307 // LINX_(__NR_setns, sys_ni_syscall), // 308 LINXY(__NR_getcpu, sys_getcpu), // 309 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 9df7ee9edd..54ab4036c2 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -3554,6 +3554,19 @@ PRE(sys_sendmmsg) for (i = 0; i < ARG3; i++) { VG_(sprintf)(name, "mmsg[%u]", i); ML_(generic_PRE_sys_sendmsg)(tid, name, &mmsg[i].msg_hdr); + VG_(sprintf)(name, "sendmmsg(mmsg[%u].msg_len)", i); + PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); + } +} + +POST(sys_sendmmsg) +{ + if (RES > 0) { + struct vki_mmsghdr *mmsg = (struct vki_mmsghdr *)ARG2; + UInt i; + for (i = 0; i < RES; i++) { + POST_MEM_WRITE( (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); + } } } @@ -3570,6 +3583,8 @@ PRE(sys_recvmmsg) for (i = 0; i < ARG3; i++) { VG_(sprintf)(name, "mmsg[%u]", i); ML_(generic_PRE_sys_recvmsg)(tid, name, &mmsg[i].msg_hdr); + VG_(sprintf)(name, "sendmmsg(mmsg[%u].msg_len)", i); + PRE_MEM_WRITE( name, (Addr)&mmsg[i].msg_len, sizeof(mmsg[i].msg_len) ); } if (ARG5) PRE_MEM_READ( "recvmmsg(timeout)", ARG5, sizeof(struct vki_timespec) ); diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 840c47aaa1..925ff1e416 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -2229,7 +2229,7 @@ static SyscallTableEntry syscall_table[] = { // LINX_(__NR_clock_adjtime, sys_ni_syscall), // 343 // LINX_(__NR_syncfs, sys_ni_syscall), // 344 - LINX_(__NR_sendmmsg, sys_sendmmsg), // 345 + LINXY(__NR_sendmmsg, sys_sendmmsg), // 345 // 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 -- 2.47.2