summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcsjp <csjp@FreeBSD.org>2004-05-10 15:07:23 +0000
committercsjp <csjp@FreeBSD.org>2004-05-10 15:07:23 +0000
commit3cc360e7bb13bbf6a91389479e2d16f60aa0667e (patch)
tree14c8e3598a7376ca19cb4a9b69ca8a68f23fdc39
parentb0cb92151500fc3df6bf506441ec94d5d2eb2eb7 (diff)
downloadFreeBSD-src-3cc360e7bb13bbf6a91389479e2d16f60aa0667e.zip
FreeBSD-src-3cc360e7bb13bbf6a91389479e2d16f60aa0667e.tar.gz
Zero the un-used portions of the struct sockaddr data before sending
it back to userspace, so it does not break bind(2) on raw sockets in jails. Currently some processes, like traceroute(8) construct a routing request to determine its source address based on the destination. This sockaddr data is fed directly to bind(2). When bind calls ifa_ifwithaddr(9) to make sure the address exists on the interface, the comparison will fail causing bind(2) to return EADDRNOTAVAIL if the data wasnt zero'ed before initialization. Approved by: bmilekic (mentor)
-rw-r--r--sys/net/rtsock.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 002432b..d5e1abe 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -404,6 +404,7 @@ route_output(struct mbuf *m, struct socket *so)
info.rti_info[RTAX_IFP] =
ifaddr_byindex(ifp->if_index)->ifa_addr;
if (jailed(so->so_cred)) {
+ memset(&jail, 0, sizeof(jail));
jail.sin_family = PF_INET;
jail.sin_len = sizeof(jail);
jail.sin_addr.s_addr =
OpenPOWER on IntegriCloud