diff options
author | bz <bz@FreeBSD.org> | 2008-07-10 13:31:11 +0000 |
---|---|---|
committer | bz <bz@FreeBSD.org> | 2008-07-10 13:31:11 +0000 |
commit | 362cb79214c7ca17170d1530859aaf180e618d75 (patch) | |
tree | 465d7c3dd198bb4a6aefe767a4b80dc63c877b5a /sys/netinet6 | |
parent | 3881e50cbab0a113c2b83bf15fd896c969e4224e (diff) | |
download | FreeBSD-src-362cb79214c7ca17170d1530859aaf180e618d75.zip FreeBSD-src-362cb79214c7ca17170d1530859aaf180e618d75.tar.gz |
Pass the ucred along into in{,6}_pcblookup_local for upcoming
prison checks.
Reviewed by: rwatson
Diffstat (limited to 'sys/netinet6')
-rw-r--r-- | sys/netinet6/in6_pcb.c | 12 | ||||
-rw-r--r-- | sys/netinet6/in6_pcb.h | 3 | ||||
-rw-r--r-- | sys/netinet6/in6_src.c | 6 |
3 files changed, 11 insertions, 10 deletions
diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c index 07e5447..619c087 100644 --- a/sys/netinet6/in6_pcb.c +++ b/sys/netinet6/in6_pcb.c @@ -189,7 +189,7 @@ in6_pcbbind(register struct inpcb *inp, struct sockaddr *nam, PRIV_NETINET_REUSEPORT, 0) != 0) { t = in6_pcblookup_local(pcbinfo, &sin6->sin6_addr, lport, - INPLOOKUP_WILDCARD); + INPLOOKUP_WILDCARD, cred); if (t && ((t->inp_vflag & INP_TIMEWAIT) == 0) && (so->so_type != SOCK_STREAM || @@ -206,8 +206,8 @@ in6_pcbbind(register struct inpcb *inp, struct sockaddr *nam, in6_sin6_2_sin(&sin, sin6); t = in_pcblookup_local(pcbinfo, - sin.sin_addr, lport, - INPLOOKUP_WILDCARD); + sin.sin_addr, lport, + INPLOOKUP_WILDCARD, cred); if (t && ((t->inp_vflag & INP_TIMEWAIT) == 0) && @@ -220,7 +220,7 @@ in6_pcbbind(register struct inpcb *inp, struct sockaddr *nam, } } t = in6_pcblookup_local(pcbinfo, &sin6->sin6_addr, - lport, wild); + lport, wild, cred); if (t && (reuseport & ((t->inp_vflag & INP_TIMEWAIT) ? intotw(t)->tw_so_options : t->inp_socket->so_options)) == 0) @@ -231,7 +231,7 @@ in6_pcbbind(register struct inpcb *inp, struct sockaddr *nam, in6_sin6_2_sin(&sin, sin6); t = in_pcblookup_local(pcbinfo, sin.sin_addr, - lport, wild); + lport, wild, cred); if (t && t->inp_vflag & INP_TIMEWAIT) { if ((reuseport & intotw(t)->tw_so_options) == 0 && @@ -674,7 +674,7 @@ in6_pcbnotify(struct inpcbinfo *pcbinfo, struct sockaddr *dst, */ struct inpcb * in6_pcblookup_local(struct inpcbinfo *pcbinfo, struct in6_addr *laddr, - u_short lport, int wild_okay) + u_short lport, int wild_okay, struct ucred *cred) { register struct inpcb *inp; int matchwild = 3, wildcard; diff --git a/sys/netinet6/in6_pcb.h b/sys/netinet6/in6_pcb.h index 83551b5..c1e2107 100644 --- a/sys/netinet6/in6_pcb.h +++ b/sys/netinet6/in6_pcb.h @@ -80,7 +80,8 @@ int in6_pcbladdr __P((struct inpcb *, struct sockaddr *, struct in6_addr **)); struct inpcb * in6_pcblookup_local __P((struct inpcbinfo *, - struct in6_addr *, u_short, int)); + struct in6_addr *, u_short, int, + struct ucred *)); struct inpcb * in6_pcblookup_hash __P((struct inpcbinfo *, struct in6_addr *, u_int, struct in6_addr *, diff --git a/sys/netinet6/in6_src.c b/sys/netinet6/in6_src.c index ffc4c63..3464445 100644 --- a/sys/netinet6/in6_src.c +++ b/sys/netinet6/in6_src.c @@ -823,7 +823,7 @@ in6_pcbsetport(struct in6_addr *laddr, struct inpcb *inp, struct ucred *cred) *lastport = first; lport = htons(*lastport); } while (in6_pcblookup_local(pcbinfo, &inp->in6p_laddr, - lport, wild)); + lport, wild, cred)); } else { /* * counting up @@ -843,8 +843,8 @@ in6_pcbsetport(struct in6_addr *laddr, struct inpcb *inp, struct ucred *cred) if (*lastport < first || *lastport > last) *lastport = first; lport = htons(*lastport); - } while (in6_pcblookup_local(pcbinfo, - &inp->in6p_laddr, lport, wild)); + } while (in6_pcblookup_local(pcbinfo, &inp->in6p_laddr, + lport, wild, cred)); } inp->inp_lport = lport; |