Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 3 Jan 2002 22:34:05 -0800 (PST)
From:      Archie Cobbs <archie@dellroad.org>
To:        Scott Lamb <slamb@slamb.org>
Cc:        freebsd-net@FreeBSD.ORG
Subject:   Re: netgraph kernel panic
Message-ID:  <200201040634.g046Y5N23209@arch20m.dellroad.org>
In-Reply-To: <20020104043335.GA87710@cairo.zsat.net> "from Scott Lamb at Jan 3, 2002 10:33:35 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
Scott Lamb writes:
> FreeBSD 4.5-PRERELEASE (as of a few days ago) is crashing consistently
> when I try to initiate a PPTP connection to with mpd-netgraph 3.3 (from
> ports).

This is due to a problem caused by the peer's "outside" PPTP IP address
(the one from mpd.links) being equal to its "inside" IP address (the
one from "set ipcp ranges ...").

Make those different and it should stop crashing. Also, apply
the patch below to prevent it from happening again.

-Archie

__________________________________________________________________________
Archie Cobbs     *     Packet Design     *     http://www.packetdesign.com

Index: ipcp.c
===================================================================
RCS file: /home/cvs/archie/mpd/src/ipcp.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ipcp.c	2001/04/12 17:03:31	1.2
+++ ipcp.c	2001/12/16 03:47:25	1.3
@@ -19,6 +19,7 @@
 #include "custom.h"
 #include "msg.h"
 #include "ngfunc.h"
+#include "pptp.h"
 
 #include <netgraph.h>
 #include <sys/mbuf.h>
@@ -607,7 +608,7 @@
 	  switch (mode) {
 	    case MODE_REQ:
 	      if (!IpAddrInRange(&ipcp->conf.peer_allow, *ip) || !ip->s_addr) {
-		if (ipcp->peer_addr.s_addr == 0)
+nak_ip:		if (ipcp->peer_addr.s_addr == 0)
 		  Log(LG_IPCP, ("   %s", "no IP address available for peer!"));
 		if (Enabled(&ipcp->conf.options, IPCP_CONF_PRETENDIP)) {
 		  Log(LG_IPCP, ("   pretending that %s is OK, will ignore",
@@ -620,6 +621,17 @@
 		Log(LG_IPCP, ("   NAKing with %s", inet_ntoa(*ip)));
 		FsmNak(fp, opt);
 		break;
+	      }
+	      if (bund->links[0]->phys->type == &gPptpPhysType) {
+		struct in_addr pip;
+
+		lnk = bund->links[0];
+		pip = PptpGetPeerIp();
+		if (ip->s_addr == pip.s_addr) {
+		  Log(LG_IPCP,
+		    ("   Same as PPTP IP; would cause routing loop"));
+		  goto nak_ip;
+		}
 	      }
 	      Log(LG_IPCP, ("   %s is OK", inet_ntoa(*ip)));
 	      ipcp->peer_addr = *ip;

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200201040634.g046Y5N23209>