commit d67f20debc80ad98c76b0edb8fc44002ca9ea0cd Author: Mark Wielaard Date: Tue May 13 15:07:52 2014 +0200 Use safe_to_deref in coregrind syswrap-generic.c (msghdr_foreachfield). Call ML_(safe_to_deref) before using msghdr msg_name, msg_iov or msg_control. Fixes bug #334705. diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c index cdf64ea..f1207f4 100644 --- a/coregrind/m_syswrap/syswrap-generic.c +++ b/coregrind/m_syswrap/syswrap-generic.c @@ -951,13 +951,15 @@ void msghdr_foreachfield ( if ( recv ) foreach_func ( tid, False, fieldName, (Addr)&msg->msg_flags, sizeof( msg->msg_flags ) ); - if ( msg->msg_name ) { + if ( ML_(safe_to_deref)(&msg->msg_name, sizeof (void *)) + && msg->msg_name ) { VG_(sprintf) ( fieldName, "(%s.msg_name)", name ); foreach_func ( tid, False, fieldName, (Addr)msg->msg_name, msg->msg_namelen ); } - if ( msg->msg_iov ) { + if ( ML_(safe_to_deref)(&msg->msg_iov, sizeof (void *)) + && msg->msg_iov ) { struct vki_iovec *iov = msg->msg_iov; UInt i; @@ -975,7 +977,8 @@ void msghdr_foreachfield ( } } - if ( msg->msg_control ) + if ( ML_(safe_to_deref) (&msg->msg_control, sizeof (void *)) + && msg->msg_control ) { VG_(sprintf) ( fieldName, "(%s.msg_control)", name ); foreach_func ( tid, False, fieldName,