|
From: <sv...@va...> - 2005-08-29 12:55:38
|
Author: sewardj
Date: 2005-08-29 13:55:36 +0100 (Mon, 29 Aug 2005)
New Revision: 4563
Log:
Merge r4549 (Handle the SCTP_GET_LOCAL_ADDRS and SCTP_GET_PEER_ADDRS
getsockopt calls correctly.)
Modified:
branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-generic.c
branches/VALGRIND_3_0_BRANCH/include/vki-amd64-linux.h
branches/VALGRIND_3_0_BRANCH/include/vki-linux.h
branches/VALGRIND_3_0_BRANCH/include/vki-ppc32-linux.h
branches/VALGRIND_3_0_BRANCH/include/vki-x86-linux.h
Modified: branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-generi=
c.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-generic.c 20=
05-08-29 12:51:05 UTC (rev 4562)
+++ branches/VALGRIND_3_0_BRANCH/coregrind/m_syswrap/syswrap-generic.c 20=
05-08-29 12:55:36 UTC (rev 4563)
@@ -1146,10 +1146,17 @@
Addr optval_p =3D arg3;
Addr optlen_p =3D arg4;
/* vg_assert(sizeof(socklen_t) =3D=3D sizeof(UInt)); */
- if (optval_p !=3D (Addr)NULL)=20
+ if (optval_p !=3D (Addr)NULL) {
buf_and_len_pre_check ( tid, optval_p, optlen_p,
"socketcall.getsockopt(optval)",
"socketcall.getsockopt(optlen)" );
+ if (arg1 =3D=3D VKI_SOL_SCTP &&
+ (arg2 =3D=3D VKI_SCTP_GET_PEER_ADDRS || arg2 =3D=3D VKI_SCTP_G=
ET_LOCAL_ADDRS)) {
+ struct vki_sctp_getaddrs *ga =3D (struct vki_sctp_getaddrs*)arg=
3;
+ int address_bytes =3D sizeof(struct vki_sockaddr_in6) * ga->add=
r_num;
+ PRE_MEM_WRITE( "socketcall.getsockopt(optval.addrs)", (Addr)ga-=
>addrs, address_bytes );
+ }
+ }
}
=20
void=20
@@ -1161,9 +1168,28 @@
Addr optval_p =3D arg3;
Addr optlen_p =3D arg4;
vg_assert(!res.isError); /* guaranteed by caller */
- if (optval_p !=3D (Addr)NULL)=20
+ if (optval_p !=3D (Addr)NULL) {
buf_and_len_post_check ( tid, res, optval_p, optlen_p,
"socketcall.getsockopt(optlen_out)" );
+ if (arg1 =3D=3D VKI_SOL_SCTP &&
+ (arg2 =3D=3D VKI_SCTP_GET_PEER_ADDRS || arg2 =3D=3D VKI_SCTP_G=
ET_LOCAL_ADDRS)) {
+ struct vki_sctp_getaddrs *ga =3D (struct vki_sctp_getaddrs*)arg=
3;
+ struct vki_sockaddr *a =3D ga->addrs;
+ int i;
+ for (i =3D 0; i < ga->addr_num; i++) {
+ int sl =3D 0;
+ if (a->sa_family =3D=3D VKI_AF_INET)
+ sl =3D sizeof(struct vki_sockaddr_in);
+ else if (a->sa_family =3D=3D VKI_AF_INET6)
+ sl =3D sizeof(struct vki_sockaddr_in6);
+ else {
+ VG_(message)(Vg_UserMsg, "Warning: getsockopt: unhandled =
address type %d", a->sa_family);
+ }
+ a =3D (struct vki_sockaddr*)((char*)a + sl);
+ }
+ POST_MEM_WRITE( (Addr)ga->addrs, (char*)a - (char*)ga->addrs );
+ }
+ }
}
=20
/* ------ */
Modified: branches/VALGRIND_3_0_BRANCH/include/vki-amd64-linux.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/VALGRIND_3_0_BRANCH/include/vki-amd64-linux.h 2005-08-29 12:=
51:05 UTC (rev 4562)
+++ branches/VALGRIND_3_0_BRANCH/include/vki-amd64-linux.h 2005-08-29 12:=
55:36 UTC (rev 4563)
@@ -44,6 +44,7 @@
typedef __signed__ short __vki_s16;
typedef unsigned short __vki_u16;
=20
+typedef __signed__ int __vki_s32;
typedef unsigned int __vki_u32;
=20
typedef __signed__ long long __vki_s64;
Modified: branches/VALGRIND_3_0_BRANCH/include/vki-linux.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/VALGRIND_3_0_BRANCH/include/vki-linux.h 2005-08-29 12:51:05 =
UTC (rev 4562)
+++ branches/VALGRIND_3_0_BRANCH/include/vki-linux.h 2005-08-29 12:55:36 =
UTC (rev 4563)
@@ -587,6 +587,8 @@
=20
#define VKI_MSG_NOSIGNAL 0x4000 /* Do not generate SIGPIPE */
=20
+#define VKI_SOL_SCTP 132
+
//----------------------------------------------------------------------
// From linux-2.6.8.1/include/linux/in.h
//----------------------------------------------------------------------
@@ -772,6 +774,73 @@
};
=20
//----------------------------------------------------------------------
+// From linux-2.6.13-rc5/include/net/sctp/user.h
+//----------------------------------------------------------------------
+
+typedef __vki_s32 vki_sctp_assoc_t;
+
+enum vki_sctp_optname {
+ VKI_SCTP_RTOINFO,
+#define VKI_SCTP_RTOINFO VKI_SCTP_RTOINFO
+ VKI_SCTP_ASSOCINFO,
+#define VKI_SCTP_ASSOCINFO VKI_SCTP_ASSOCINFO
+ VKI_SCTP_INITMSG,
+#define VKI_SCTP_INITMSG VKI_SCTP_INITMSG
+ VKI_SCTP_NODELAY, /* Get/set nodelay option. */
+#define VKI_SCTP_NODELAY VKI_SCTP_NODELAY
+ VKI_SCTP_AUTOCLOSE,
+#define VKI_SCTP_AUTOCLOSE VKI_SCTP_AUTOCLOSE
+ VKI_SCTP_SET_PEER_PRIMARY_ADDR,=20
+#define VKI_SCTP_SET_PEER_PRIMARY_ADDR VKI_SCTP_SET_PEER_PRIMARY_ADDR
+ VKI_SCTP_PRIMARY_ADDR,
+#define VKI_SCTP_PRIMARY_ADDR VKI_SCTP_PRIMARY_ADDR
+ VKI_SCTP_ADAPTION_LAYER, =20
+#define VKI_SCTP_ADAPTION_LAYER VKI_SCTP_ADAPTION_LAYER
+ VKI_SCTP_DISABLE_FRAGMENTS,
+#define VKI_SCTP_DISABLE_FRAGMENTS VKI_SCTP_DISABLE_FRAGMENTS
+ VKI_SCTP_PEER_ADDR_PARAMS,
+#define VKI_SCTP_PEER_ADDR_PARAMS VKI_SCTP_PEER_ADDR_PARAMS
+ VKI_SCTP_DEFAULT_SEND_PARAM,
+#define VKI_SCTP_DEFAULT_SEND_PARAM VKI_SCTP_DEFAULT_SEND_PARAM
+ VKI_SCTP_EVENTS,
+#define VKI_SCTP_EVENTS VKI_SCTP_EVENTS
+ VKI_SCTP_I_WANT_MAPPED_V4_ADDR, /* Turn on/off mapped v4 addresses */
+#define VKI_SCTP_I_WANT_MAPPED_V4_ADDR VKI_SCTP_I_WANT_MAPPED_V4_ADDR
+ VKI_SCTP_MAXSEG, /* Get/set maximum fragment. */
+#define VKI_SCTP_MAXSEG VKI_SCTP_MAXSEG
+ VKI_SCTP_STATUS,
+#define VKI_SCTP_STATUS VKI_SCTP_STATUS
+ VKI_SCTP_GET_PEER_ADDR_INFO,
+#define VKI_SCTP_GET_PEER_ADDR_INFO VKI_SCTP_GET_PEER_ADDR_INFO
+
+ /* Internal Socket Options. Some of the sctp library functions are=20
+ * implemented using these socket options.
+ */
+ VKI_SCTP_SOCKOPT_BINDX_ADD =3D 100,/* BINDX requests for adding address=
es. */
+#define VKI_SCTP_SOCKOPT_BINDX_ADD VKI_SCTP_SOCKOPT_BINDX_ADD
+ VKI_SCTP_SOCKOPT_BINDX_REM, /* BINDX requests for removing addresses. *=
/
+#define VKI_SCTP_SOCKOPT_BINDX_REM VKI_SCTP_SOCKOPT_BINDX_REM
+ VKI_SCTP_SOCKOPT_PEELOFF, /* peel off association. */
+#define VKI_SCTP_SOCKOPT_PEELOFF VKI_SCTP_SOCKOPT_PEELOFF
+ VKI_SCTP_GET_PEER_ADDRS_NUM, /* Get number of peer addresss. */
+#define VKI_SCTP_GET_PEER_ADDRS_NUM VKI_SCTP_GET_PEER_ADDRS_NUM
+ VKI_SCTP_GET_PEER_ADDRS, /* Get all peer addresss. */
+#define VKI_SCTP_GET_PEER_ADDRS VKI_SCTP_GET_PEER_ADDRS
+ VKI_SCTP_GET_LOCAL_ADDRS_NUM, /* Get number of local addresss. */
+#define VKI_SCTP_GET_LOCAL_ADDRS_NUM VKI_SCTP_GET_LOCAL_ADDRS_NUM
+ VKI_SCTP_GET_LOCAL_ADDRS, /* Get all local addresss. */
+#define VKI_SCTP_GET_LOCAL_ADDRS VKI_SCTP_GET_LOCAL_ADDRS
+ VKI_SCTP_SOCKOPT_CONNECTX, /* CONNECTX requests. */
+#define VKI_SCTP_SOCKOPT_CONNECTX VKI_SCTP_SOCKOPT_CONNECTX
+};
+
+struct vki_sctp_getaddrs {
+ vki_sctp_assoc_t assoc_id;
+ int addr_num;
+ struct vki_sockaddr *addrs;
+};
+
+//----------------------------------------------------------------------
// From linux-2.6.8.1/include/linux/resource.h
//----------------------------------------------------------------------
=20
Modified: branches/VALGRIND_3_0_BRANCH/include/vki-ppc32-linux.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/VALGRIND_3_0_BRANCH/include/vki-ppc32-linux.h 2005-08-29 12:=
51:05 UTC (rev 4562)
+++ branches/VALGRIND_3_0_BRANCH/include/vki-ppc32-linux.h 2005-08-29 12:=
55:36 UTC (rev 4563)
@@ -44,6 +44,7 @@
typedef __signed__ short __vki_s16;
typedef unsigned short __vki_u16;
=20
+typedef __signed__ int __vki_s32;
typedef unsigned int __vki_u32;
=20
typedef __signed__ long long __vki_s64;
Modified: branches/VALGRIND_3_0_BRANCH/include/vki-x86-linux.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/VALGRIND_3_0_BRANCH/include/vki-x86-linux.h 2005-08-29 12:51=
:05 UTC (rev 4562)
+++ branches/VALGRIND_3_0_BRANCH/include/vki-x86-linux.h 2005-08-29 12:55=
:36 UTC (rev 4563)
@@ -43,6 +43,7 @@
typedef __signed__ short __vki_s16;
typedef unsigned short __vki_u16;
=20
+typedef __signed__ int __vki_s32;
typedef unsigned int __vki_u32;
=20
typedef __signed__ long long __vki_s64;
|