summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormvs <mvs@openbsd.org>2020-06-22 09:38:15 +0000
committermvs <mvs@openbsd.org>2020-06-22 09:38:15 +0000
commit0dd8107de1f079472b4a1e690b378b6a322c553e (patch)
tree1b0b515e05649821b221bdd40da87f17f068e742
parentInstall npppd.conf(5) with mode 0600 instead of 0640. npppd.conf(5) can (diff)
downloadwireguard-openbsd-0dd8107de1f079472b4a1e690b378b6a322c553e.tar.xz
wireguard-openbsd-0dd8107de1f079472b4a1e690b378b6a322c553e.zip
Prevent potencial `state_list' corruption while pppac(4) destroys pipex(4)
sessions by pipex_iface_fini() or by pipex_ioctl() with `PIPEXSMODE' command. ok yasuoka@
-rw-r--r--sys/net/pipex.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/net/pipex.c b/sys/net/pipex.c
index ef67645ea26..5029d86c258 100644
--- a/sys/net/pipex.c
+++ b/sys/net/pipex.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pipex.c,v 1.115 2020/06/18 14:20:12 mvs Exp $ */
+/* $OpenBSD: pipex.c,v 1.116 2020/06/22 09:38:15 mvs Exp $ */
/*-
* Copyright (c) 2009 Internet Initiative Japan Inc.
@@ -473,8 +473,10 @@ pipex_unlink_session(struct pipex_session *session)
break;
}
#endif
-
+ if (session->state == PIPEX_STATE_CLOSE_WAIT)
+ LIST_REMOVE(session, state_list);
LIST_REMOVE(session, session_list);
+ session->state = PIPEX_STATE_CLOSED;
/* if final session is destroyed, stop timer */
if (LIST_EMPTY(&pipex_session_list))