Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 08 Jul 1997 15:32:17 +0800
From:      Peter Wemm <peter@spinner.dialix.com.au>
To:        Bill Fenner <fenner@parc.xerox.com>
Cc:        Julian Elischer <julian@FreeBSD.ORG>, cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG, cvs-sys@FreeBSD.ORG, wollman@FreeBSD.ORG
Subject:   Re: cvs commit: src/sys/net if.c 
Message-ID:  <199707080732.PAA29282@spinner.dialix.com.au>
In-Reply-To: Your message of "Mon, 07 Jul 1997 18:43:43 PDT." <97Jul7.184349pdt.177512@crevenia.parc.xerox.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
Bill Fenner wrote:
> This should have been a 3-line fix.  I don't understand why you chose
> to restructure the first section of code; it has now lost its
> parallelism with the next place that looks for a multicast address on
> the list.
> 
> (e.g. the 2nd bit is
> 
>                 for (ifma = ifp->if_multiaddrs.lh_first; ifma;
>                      ifma = ifma->ifma_link.le_next) {
>                         if (equal(ifma->ifma_addr, llsa))
>                                 break;
>                 }
>                 if (ifma) {
> 	...
> 
> so why not leave the first bit looking like that too, or restructure
> the 2nd bit in the same way you restructured the 1st bit?)

I've not looked at the commit yet, but is this related to the in_ifdown 
panics with ppp?

I had to make this patch a few days ago:
Index: netinet/raw_ip.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/raw_ip.c,v
retrieving revision 1.46
diff -u -4 -r1.46 raw_ip.c
--- raw_ip.c	1997/05/22 20:52:56	1.46
+++ raw_ip.c	1997/07/08 07:26:51
@@ -346,15 +346,17 @@
 				/*
 				 * in_ifscrub kills the interface route.
 				 */
 				in_ifscrub(ia->ia_ifp, ia);
+#if 0
 				/*
 				 * in_ifadown gets rid of all the rest of
 				 * the routes.  This is not quite the right
 				 * thing to do, but at least if we are running
 				 * a routing process they will come back.
 				 */
 				in_ifadown(&ia->ia_ifa);
+#endif
 				break;
 			}
 		}
 		break;

The problem was that killing pppd with routed active to it (eg: gated with a 
dozen routes) would cause rtrequest(RTM_DELETE, ...) to explode a little 
further down with really bad pointers.  From what I could see, the 
rt_key(..) value (meant to be a sockaddr *) was pointing off into the void 
(perhaps it had been freed already?), the sa_family was bogus, and the 
sa_family was being used as a bad index into an array for the route tree 
and ending up with a very bogus rnh pointer in rtrequest().

I had not yet got around to doing a send-pr yet.

>   Bill
> 

Cheers,
-Peter




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