]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
It turns out sendmmsg also updates the msg_len fields.
authorTom Hughes <tom@compton.nu>
Fri, 10 Feb 2012 11:48:01 +0000 (11:48 +0000)
committerTom Hughes <tom@compton.nu>
Fri, 10 Feb 2012 11:48:01 +0000 (11:48 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12377

coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c

index 5b8d83fca9ffd34a8ef04b4194d2aabe4e49b2d7..3e60913912f9cd472e456d76fc7e72e20af6f02a 100644 (file)
@@ -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
 
index 9df7ee9eddca3db7e551dd00784dc80b60857bfa..54ab4036c23646cb9e40760e81a80f595747113d 100644 (file)
@@ -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) );
index 840c47aaa1450f2a096cfb3bca1f43aaf28e511c..925ff1e41620716efc6dbb44e7e24edffa59501b 100644 (file)
@@ -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