aboutsummaryrefslogtreecommitdiff
path: root/sys/net/rtsock.c
diff options
context:
space:
mode:
authorJamie Gritton <jamie@FreeBSD.org>2009-02-05 14:06:09 +0000
committerJamie Gritton <jamie@FreeBSD.org>2009-02-05 14:06:09 +0000
commitb89e82dd87dec9034c8b7f1a01524dceea11ff49 (patch)
tree71fe0b10296684e7094a545ca78ed6f72789d82d /sys/net/rtsock.c
parent9719301922b4612e967cf109913d18c2fe0e1563 (diff)
downloadsrc-b89e82dd87dec9034c8b7f1a01524dceea11ff49.tar.gz
src-b89e82dd87dec9034c8b7f1a01524dceea11ff49.zip
Standardize the various prison_foo_ip[46] functions and prison_if to
return zero on success and an error code otherwise. The possible errors are EADDRNOTAVAIL if an address being checked for doesn't match the prison, and EAFNOSUPPORT if the prison doesn't have any addresses in that address family. For most callers of these functions, use the returned error code instead of e.g. a hard-coded EADDRNOTAVAIL or EINVAL. Always include a jailed() check in these functions, where a non-jailed cred always returns success (and makes no changes). Remove the explicit jailed() checks that preceded many of the function calls. Approved by: bz (mentor)
Notes
Notes: svn path=/head/; revision=188144
Diffstat (limited to 'sys/net/rtsock.c')
-rw-r--r--sys/net/rtsock.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 12a3cba4b805..8d2d07af4c86 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -347,7 +347,7 @@ rtm_get_jailed(struct rt_addrinfo *info, struct ifnet *ifp,
* 1. Check if the returned address is part of the jail.
*/
ia = ((struct sockaddr_in *)rt->rt_ifa->ifa_addr)->sin_addr;
- if (prison_check_ip4(cred, &ia) != 0) {
+ if (prison_check_ip4(cred, &ia) == 0) {
info->rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
} else {
@@ -366,7 +366,7 @@ rtm_get_jailed(struct rt_addrinfo *info, struct ifnet *ifp,
if (sa->sa_family != AF_INET)
continue;
ia = ((struct sockaddr_in *)sa)->sin_addr;
- if (prison_check_ip4(cred, &ia) != 0) {
+ if (prison_check_ip4(cred, &ia) == 0) {
found = 1;
break;
}
@@ -399,7 +399,7 @@ rtm_get_jailed(struct rt_addrinfo *info, struct ifnet *ifp,
*/
bcopy(&((struct sockaddr_in6 *)rt->rt_ifa->ifa_addr)->sin6_addr,
&ia6, sizeof(struct in6_addr));
- if (prison_check_ip6(cred, &ia6) != 0) {
+ if (prison_check_ip6(cred, &ia6) == 0) {
info->rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
} else {
struct ifaddr *ifa;
@@ -418,7 +418,7 @@ rtm_get_jailed(struct rt_addrinfo *info, struct ifnet *ifp,
continue;
bcopy(&((struct sockaddr_in6 *)sa)->sin6_addr,
&ia6, sizeof(struct in6_addr));
- if (prison_check_ip6(cred, &ia6) != 0) {
+ if (prison_check_ip6(cred, &ia6) == 0) {
found = 1;
break;
}
@@ -612,9 +612,10 @@ route_output(struct mbuf *m, struct socket *so)
case RTM_GET:
report:
RT_LOCK_ASSERT(rt);
- if (jailed(curthread->td_ucred) &&
- ((rt->rt_flags & RTF_HOST) == 0 ||
- !prison_if(curthread->td_ucred, rt_key(rt)))) {
+ if ((rt->rt_flags & RTF_HOST) == 0
+ ? jailed(curthread->td_ucred)
+ : prison_if(curthread->td_ucred,
+ rt_key(rt)) != 0) {
RT_UNLOCK(rt);
senderr(ESRCH);
}
@@ -1263,9 +1264,9 @@ sysctl_dumpentry(struct radix_node *rn, void *vw)
if (w->w_op == NET_RT_FLAGS && !(rt->rt_flags & w->w_arg))
return 0;
- if (jailed(w->w_req->td->td_ucred) &&
- ((rt->rt_flags & RTF_HOST) == 0 ||
- !prison_if(w->w_req->td->td_ucred, rt_key(rt))))
+ if ((rt->rt_flags & RTF_HOST) == 0
+ ? jailed(w->w_req->td->td_ucred)
+ : prison_if(w->w_req->td->td_ucred, rt_key(rt)) != 0)
return (0);
bzero((caddr_t)&info, sizeof(info));
info.rti_info[RTAX_DST] = rt_key(rt);
@@ -1327,8 +1328,8 @@ sysctl_iflist(int af, struct walkarg *w)
while ((ifa = TAILQ_NEXT(ifa, ifa_link)) != NULL) {
if (af && af != ifa->ifa_addr->sa_family)
continue;
- if (jailed(w->w_req->td->td_ucred) &&
- !prison_if(w->w_req->td->td_ucred, ifa->ifa_addr))
+ if (prison_if(w->w_req->td->td_ucred,
+ ifa->ifa_addr) != 0)
continue;
info.rti_info[RTAX_IFA] = ifa->ifa_addr;
info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask;
@@ -1376,8 +1377,8 @@ sysctl_ifmalist(int af, struct walkarg *w)
TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
if (af && af != ifma->ifma_addr->sa_family)
continue;
- if (jailed(w->w_req->td->td_ucred) &&
- !prison_if(w->w_req->td->td_ucred, ifma->ifma_addr))
+ if (prison_if(w->w_req->td->td_ucred,
+ ifma->ifma_addr) != 0)
continue;
info.rti_info[RTAX_IFA] = ifma->ifma_addr;
info.rti_info[RTAX_GATEWAY] =