|
From: <sv...@va...> - 2014-08-06 19:52:23
|
Author: sewardj
Date: Wed Aug 6 19:52:12 2014
New Revision: 14237
Log:
pre_mem_read_sockaddr: properly handle the NETLINK address family
rather than throwing to the default case. This stops Memcheck
reporting false positives for the NETLINK case.
Modified:
trunk/coregrind/m_syswrap/syswrap-generic.c
trunk/include/vki/vki-linux.h
Modified: trunk/coregrind/m_syswrap/syswrap-generic.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-generic.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-generic.c Wed Aug 6 19:52:12 2014
@@ -1021,9 +1021,12 @@
struct vki_sockaddr_un* sun = (struct vki_sockaddr_un *)sa;
struct vki_sockaddr_in* sin = (struct vki_sockaddr_in *)sa;
struct vki_sockaddr_in6* sin6 = (struct vki_sockaddr_in6 *)sa;
-#ifdef VKI_AF_BLUETOOTH
+# ifdef VKI_AF_BLUETOOTH
struct vki_sockaddr_rc* rc = (struct vki_sockaddr_rc *)sa;
-#endif
+# endif
+# ifdef VKI_AF_NETLINK
+ struct vki_sockaddr_nl* nl = (struct vki_sockaddr_nl *)sa;
+# endif
/* NULL/zero-length sockaddrs are legal */
if ( sa == NULL || salen == 0 ) return;
@@ -1064,14 +1067,23 @@
(Addr) &sin6->sin6_scope_id, sizeof (sin6->sin6_scope_id) );
break;
-#ifdef VKI_AF_BLUETOOTH
+# ifdef VKI_AF_BLUETOOTH
case VKI_AF_BLUETOOTH:
VG_(sprintf) ( outmsg, description, "rc_bdaddr" );
PRE_MEM_READ( outmsg, (Addr) &rc->rc_bdaddr, sizeof (rc->rc_bdaddr) );
VG_(sprintf) ( outmsg, description, "rc_channel" );
PRE_MEM_READ( outmsg, (Addr) &rc->rc_channel, sizeof (rc->rc_channel) );
break;
-#endif
+# endif
+
+# ifdef VKI_AF_NETLINK
+ case VKI_AF_NETLINK:
+ VG_(sprintf)(outmsg, description, "nl_pid");
+ PRE_MEM_READ(outmsg, (Addr)&nl->nl_pid, sizeof(nl->nl_pid));
+ VG_(sprintf)(outmsg, description, "nl_groups");
+ PRE_MEM_READ(outmsg, (Addr)&nl->nl_groups, sizeof(nl->nl_groups));
+ break;
+# endif
default:
/* No specific information about this address family.
Modified: trunk/include/vki/vki-linux.h
==============================================================================
--- trunk/include/vki/vki-linux.h (original)
+++ trunk/include/vki/vki-linux.h Wed Aug 6 19:52:12 2014
@@ -682,9 +682,11 @@
#define VKI_SCM_RIGHTS 0x01 /* rw: access rights (array of int) */
+#define VKI_AF_UNSPEC 0
#define VKI_AF_UNIX 1 /* Unix domain sockets */
#define VKI_AF_INET 2 /* Internet IP Protocol */
#define VKI_AF_INET6 10 /* IP version 6 */
+#define VKI_AF_NETLINK 16
#define VKI_AF_BLUETOOTH 31 /* Bluetooth sockets */
#define VKI_MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */
@@ -757,6 +759,17 @@
};
//----------------------------------------------------------------------
+// From linux-3.15.8/include/uapi/linux/netlink.h
+//----------------------------------------------------------------------
+
+struct vki_sockaddr_nl {
+ vki_sa_family_t nl_family; /* AF_NETLINK */
+ unsigned short nl_pad; /* zero */
+ __vki_u32 nl_pid; /* port ID */
+ __vki_u32 nl_groups; /* multicast groups mask */
+};
+
+//----------------------------------------------------------------------
// From linux-2.6.8.1/include/linux/if.h
//----------------------------------------------------------------------
|