summaryrefslogtreecommitdiff
path: root/sunrpc
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-02-27 08:01:47 +0000
committerUlrich Drepper <drepper@redhat.com>2003-02-27 08:01:47 +0000
commitd148ed257ab179a6a408bc1668e2effb447726bd (patch)
treedc1c20da057af92f4170187c6bbf0959a1afe1ea /sunrpc
parent695799feb3e640323ec86b469517f87ca16e99ff (diff)
Update.
2003-02-27 Ulrich Drepper <drepper@redhat.com> * sunrpc/svc_udp.c (svcudp_recv): Remove all control messages except the PKTINFO. Reset interface in PKTINFO. * elf/elf.h: Add new R_PPC64_* relocs for TLS. * elf/tls-macros.h [__powerpc64__] (TLS_LE, TLS_IE, TLS_LD, TLS_GD): Define. * sysdeps/powerpc/elf/libc-start.c (__libc_start_main):
Diffstat (limited to 'sunrpc')
-rw-r--r--sunrpc/svc_udp.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/sunrpc/svc_udp.c b/sunrpc/svc_udp.c
index 0410e9c008..cb1d70558e 100644
--- a/sunrpc/svc_udp.c
+++ b/sunrpc/svc_udp.c
@@ -258,7 +258,29 @@ again:
- sizeof (struct iovec) - sizeof (struct msghdr);
rlen = __recvmsg (xprt->xp_sock, mesgp, 0);
if (rlen >= 0)
- len = mesgp->msg_namelen;
+ {
+ struct cmsghdr *cmsg;
+ len = mesgp->msg_namelen;
+ cmsg = CMSG_FIRSTHDR (mesgp);
+ if (cmsg == NULL
+ || CMSG_NXTHDR (mesgp, cmsg) != NULL
+ || cmsg->cmsg_level != SOL_IP
+ || cmsg->cmsg_type != IP_PKTINFO
+ || cmsg->cmsg_len < (sizeof (struct cmsghdr)
+ + sizeof (struct in_pktinfo)))
+ {
+ /* Not a simple IP_PKTINFO, ignore it. */
+ mesgp->msg_control = NULL;
+ mesgp->msg_controllen = 0;
+ }
+ else
+ {
+ /* It was a simple IP_PKTIFO as we expected, discard the
+ interface field. */
+ struct in_pktinfo *pkti = CMSG_DATA (cmsg);
+ pkti->ipi_ifindex = 0;
+ }
+ }
}
else
#endif