aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet
diff options
context:
space:
mode:
authorHajimu UMEMOTO <ume@FreeBSD.org>2005-02-04 14:43:05 +0000
committerHajimu UMEMOTO <ume@FreeBSD.org>2005-02-04 14:43:05 +0000
commit6d0a982bdfc71fa983af1f48c2113f3cbef244a1 (patch)
treeac67f445baf11e1bce1d11df93a25f938c0a8a2b /sys/netinet
parent79b990338ff1f79fef10667d0541b03ec5ec7008 (diff)
Notes
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/tcp_subr.c14
-rw-r--r--sys/netinet/tcp_timewait.c14
2 files changed, 20 insertions, 8 deletions
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index 1f0cfe4a46ba5..c8a443893e32d 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -1035,6 +1035,7 @@ tcp6_getcred(SYSCTL_HANDLER_ARGS)
{
struct xucred xuc;
struct sockaddr_in6 addrs[2];
+ struct in6_addr a6[2];
struct inpcb *inp;
int error, s, mapped = 0;
@@ -1049,6 +1050,13 @@ tcp6_getcred(SYSCTL_HANDLER_ARGS)
mapped = 1;
else
return (EINVAL);
+ } else {
+ error = in6_embedscope(&a6[0], &addrs[0], NULL, NULL);
+ if (error)
+ return (EINVAL);
+ error = in6_embedscope(&a6[1], &addrs[1], NULL, NULL);
+ if (error)
+ return (EINVAL);
}
s = splnet();
INP_INFO_RLOCK(&tcbinfo);
@@ -1060,10 +1068,8 @@ tcp6_getcred(SYSCTL_HANDLER_ARGS)
addrs[0].sin6_port,
0, NULL);
else
- inp = in6_pcblookup_hash(&tcbinfo, &addrs[1].sin6_addr,
- addrs[1].sin6_port,
- &addrs[0].sin6_addr, addrs[0].sin6_port,
- 0, NULL);
+ inp = in6_pcblookup_hash(&tcbinfo, &a6[1], addrs[1].sin6_port,
+ &a6[0], addrs[0].sin6_port, 0, NULL);
if (inp == NULL) {
error = ENOENT;
goto outunlocked;
diff --git a/sys/netinet/tcp_timewait.c b/sys/netinet/tcp_timewait.c
index 1f0cfe4a46ba5..c8a443893e32d 100644
--- a/sys/netinet/tcp_timewait.c
+++ b/sys/netinet/tcp_timewait.c
@@ -1035,6 +1035,7 @@ tcp6_getcred(SYSCTL_HANDLER_ARGS)
{
struct xucred xuc;
struct sockaddr_in6 addrs[2];
+ struct in6_addr a6[2];
struct inpcb *inp;
int error, s, mapped = 0;
@@ -1049,6 +1050,13 @@ tcp6_getcred(SYSCTL_HANDLER_ARGS)
mapped = 1;
else
return (EINVAL);
+ } else {
+ error = in6_embedscope(&a6[0], &addrs[0], NULL, NULL);
+ if (error)
+ return (EINVAL);
+ error = in6_embedscope(&a6[1], &addrs[1], NULL, NULL);
+ if (error)
+ return (EINVAL);
}
s = splnet();
INP_INFO_RLOCK(&tcbinfo);
@@ -1060,10 +1068,8 @@ tcp6_getcred(SYSCTL_HANDLER_ARGS)
addrs[0].sin6_port,
0, NULL);
else
- inp = in6_pcblookup_hash(&tcbinfo, &addrs[1].sin6_addr,
- addrs[1].sin6_port,
- &addrs[0].sin6_addr, addrs[0].sin6_port,
- 0, NULL);
+ inp = in6_pcblookup_hash(&tcbinfo, &a6[1], addrs[1].sin6_port,
+ &a6[0], addrs[0].sin6_port, 0, NULL);
if (inp == NULL) {
error = ENOENT;
goto outunlocked;