summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJun-ichiro itojun Hagino <itojun@cvs.openbsd.org>2000-04-27 09:23:22 +0000
committerJun-ichiro itojun Hagino <itojun@cvs.openbsd.org>2000-04-27 09:23:22 +0000
commit1203186388358b78007acd3e4e72f08bd6c37cea (patch)
tree7e25cefad3db533bb83dce770d1df753db45dd69 /sys
parent3d706b0f5f245d354721184f0ff6e99f07b869c7 (diff)
avoid infinite loop in in{6,}_pcbnotify (can occurs on family mismatch)
Diffstat (limited to 'sys')
-rw-r--r--sys/netinet/in_pcb.c10
-rw-r--r--sys/netinet6/in6_pcb.c6
2 files changed, 11 insertions, 5 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index 99b6654fb2a..faec511620b 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: in_pcb.c,v 1.41 2000/04/21 11:42:23 itojun Exp $ */
+/* $OpenBSD: in_pcb.c,v 1.42 2000/04/27 09:23:21 itojun Exp $ */
/* $NetBSD: in_pcb.c,v 1.25 1996/02/13 23:41:53 christos Exp $ */
/*
@@ -648,8 +648,10 @@ in_pcbnotify(table, dst, fport_arg, laddr, lport_arg, errno, notify)
for (inp = table->inpt_queue.cqh_first;
inp != (struct inpcb *)&table->inpt_queue;) {
#ifdef INET6
- if (inp->inp_flags & INP_IPV6)
+ if (inp->inp_flags & INP_IPV6) {
+ inp = inp->inp_queue.cqe_next;
continue;
+ }
#endif
if (inp->inp_faddr.s_addr != faddr.s_addr ||
inp->inp_socket == 0 ||
@@ -693,8 +695,10 @@ in_pcbnotifyall(table, dst, errno, notify)
for (inp = table->inpt_queue.cqh_first;
inp != (struct inpcb *)&table->inpt_queue;) {
#ifdef INET6
- if (inp->inp_flags & INP_IPV6)
+ if (inp->inp_flags & INP_IPV6) {
+ inp = inp->inp_queue.cqe_next;
continue;
+ }
#endif
if (inp->inp_faddr.s_addr != faddr.s_addr ||
inp->inp_socket == 0) {
diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c
index 76c3292c342..e93a00e6042 100644
--- a/sys/netinet6/in6_pcb.c
+++ b/sys/netinet6/in6_pcb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: in6_pcb.c,v 1.11 2000/04/21 11:42:25 itojun Exp $ */
+/* $OpenBSD: in6_pcb.c,v 1.12 2000/04/27 09:23:21 itojun Exp $ */
/*
%%% copyright-nrl-95
@@ -567,8 +567,10 @@ in6_pcbnotify(head, dst, fport_arg, la, lport_arg, cmd, notify)
inp != (struct inpcb *)&head->inpt_queue;)
{
#ifdef INET6
- if (!(inp->inp_flags & INP_IPV6))
+ if (!(inp->inp_flags & INP_IPV6)) {
+ inp = inp->inp_queue.cqe_next;
continue;
+ }
#endif
if (!IN6_ARE_ADDR_EQUAL(&inp->inp_faddr6, faddr) ||
!inp->inp_socket ||