svn commit: r259793 - user/ae/inet6/sys/netinet6
Andrey V. Elsukov
ae at FreeBSD.org
Mon Dec 23 22:00:38 UTC 2013
Author: ae
Date: Mon Dec 23 22:00:38 2013
New Revision: 259793
URL: http://svnweb.freebsd.org/changeset/base/259793
Log:
Use updated prison_xxx_ip6() functions with sockaddr_in6 argument.
Modified:
user/ae/inet6/sys/netinet6/in6_pcb.c
Modified: user/ae/inet6/sys/netinet6/in6_pcb.c
==============================================================================
--- user/ae/inet6/sys/netinet6/in6_pcb.c Mon Dec 23 21:58:03 2013 (r259792)
+++ user/ae/inet6/sys/netinet6/in6_pcb.c Mon Dec 23 22:00:38 2013 (r259793)
@@ -128,9 +128,16 @@ in6_pcbbind(struct inpcb *inp, struct so
if ((so->so_options & (SO_REUSEADDR|SO_REUSEPORT)) == 0)
lookupflags = INPLOOKUP_WILDCARD;
if (nam == NULL) {
- if ((error = prison_local_ip6(cred, &inp->in6p_laddr,
- ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0))) != 0)
+ struct sockaddr_in6 tmp;
+
+ tmp = sa6_any;
+ error = prison_local_ip6(cred, &tmp,
+ ((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0));
+ if (error != 0)
return (error);
+ inp->in6p_laddr = tmp.sin6_addr;
+ if (IN6_IS_ADDR_LINKLOCAL(&inp->in6p_laddr))
+ inp->in6p_zoneid = tmp.sin6_scope_id;
} else {
sin6 = (struct sockaddr_in6 *)nam;
if (nam->sa_len != sizeof(*sin6))
@@ -142,7 +149,7 @@ in6_pcbbind(struct inpcb *inp, struct so
inp->in6p_moptions, sin6)) != 0)
return (error);
- if ((error = prison_local_ip6(cred, &sin6->sin6_addr,
+ if ((error = prison_local_ip6(cred, sin6,
((inp->inp_flags & IN6P_IPV6_V6ONLY) != 0))) != 0)
return (error);
@@ -328,7 +335,7 @@ in6_pcbconnect_mbuf(register struct inpc
inp->in6p_moptions, sin6);
if (error != 0)
return (error);
- if ((error = prison_remote_ip6(inp->inp_cred, &sin6->sin6_addr)) != 0)
+ if ((error = prison_remote_ip6(inp->inp_cred, sin6)) != 0)
return (error);
/*
* Determine source address and outgoing interface.
@@ -884,8 +891,8 @@ in6_pcblookup_group(struct inpcbinfo *pc
injail = prison_flag(inp->inp_cred, PR_IP6);
if (injail) {
- if (prison_check_ip6(inp->inp_cred,
- laddr) != 0)
+ if (prison_check_in6(inp->inp_cred,
+ laddr, zoneid) != 0)
continue;
} else {
if (local_exact != NULL)
@@ -1024,8 +1031,8 @@ in6_pcblookup_hash_locked(struct inpcbin
injail = prison_flag(inp->inp_cred, PR_IP6);
if (injail) {
- if (prison_check_ip6(inp->inp_cred,
- laddr) != 0)
+ if (prison_check_in6(inp->inp_cred,
+ laddr, zoneid) != 0)
continue;
} else {
if (local_exact != NULL)
More information about the svn-src-user
mailing list