From owner-freebsd-current@FreeBSD.ORG Thu Nov 11 18:53:24 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1876516A4CE; Thu, 11 Nov 2004 18:53:24 +0000 (GMT) Received: from critter.freebsd.dk (critter.freebsd.dk [212.242.86.163]) by mx1.FreeBSD.org (Postfix) with ESMTP id 501E643D46; Thu, 11 Nov 2004 18:53:23 +0000 (GMT) (envelope-from phk@critter.freebsd.dk) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.13.1/8.13.1) with ESMTP id iABIrHQO079585; Thu, 11 Nov 2004 19:53:17 +0100 (CET) (envelope-from phk@critter.freebsd.dk) To: Gleb Smirnoff From: "Poul-Henning Kamp" In-Reply-To: Your message of "Thu, 11 Nov 2004 20:26:57 +0300." <20041111172657.GF66206@cell.sick.ru> Date: Thu, 11 Nov 2004 19:53:17 +0100 Message-ID: <79584.1100199197@critter.freebsd.dk> Sender: phk@critter.freebsd.dk cc: "Conrad J. Sabatier" cc: current@freebsd.org Subject: Re: natd broken for days X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Nov 2004 18:53:24 -0000 Looks good. In message <20041111172657.GF66206@cell.sick.ru>, Gleb Smirnoff writes: > >--J2SCkAp4GZ/dPZZf >Content-Type: text/plain; charset=koi8-r >Content-Disposition: inline > >On Thu, Nov 11, 2004 at 05:40:29PM +0100, Poul-Henning Kamp wrote: >P> In message <20041111163638.GA700@laptop.6bone.nl>, Mark Santcroos writes: >P> >On Thu, Nov 11, 2004 at 05:25:23AM -0800, Sean McNeil wrote: >P> >> It has been reported that both amd64 and i386 architectures will panic >P> >> in natd by jumping to address 0. There has been no discussion since the >P> >> reports, however, and I was wondering if anyone is looking into it. >P> > >P> >This should fix it. >P> >P> We have a problem if that is the case, because then ipdivert >P> doesn't run through net_init_domain() :-( > >Poul-Henning, can you review attached patch? > >Conrad, can you test it? > >-- >Totus tuus, Glebius. >GLEBIUS-RIPN GLEB-RIPE > >--J2SCkAp4GZ/dPZZf >Content-Type: text/plain; charset=koi8-r >Content-Disposition: attachment; filename="uipc_domain.c.diff" > >Index: uipc_domain.c >=================================================================== >RCS file: /home/ncvs/src/sys/kern/uipc_domain.c,v >retrieving revision 1.39 >diff -u -r1.39 uipc_domain.c >--- uipc_domain.c 8 Nov 2004 14:44:52 -0000 1.39 >+++ uipc_domain.c 11 Nov 2004 17:23:42 -0000 >@@ -97,6 +97,34 @@ > .pru_sosetlabel = pru_sosetlabel_null > }; > >+static void >+protosw_init(struct protosw *pr) >+{ >+ struct pr_usrreqs *pu; >+ >+ pu = pr->pr_usrreqs; >+ KASSERT(pu != NULL, ("protosw_init: %ssw[%d] has no usrreqs!", >+ pr->pr_domain->dom_name, >+ (int)(pr - pr->pr_domain->dom_protosw))); >+ >+#define DEFAULT(foo, bar) if ((foo) == NULL) (foo) = (bar) >+ DEFAULT(pu->pru_accept, pru_accept_notsupp); >+ DEFAULT(pu->pru_connect, pru_connect_notsupp); >+ DEFAULT(pu->pru_connect2, pru_connect2_notsupp); >+ DEFAULT(pu->pru_control, pru_control_notsupp); >+ DEFAULT(pu->pru_listen, pru_listen_notsupp); >+ DEFAULT(pu->pru_rcvd, pru_rcvd_notsupp); >+ DEFAULT(pu->pru_rcvoob, pru_rcvoob_notsupp); >+ DEFAULT(pu->pru_sense, pru_sense_null); >+ DEFAULT(pu->pru_sosend, sosend); >+ DEFAULT(pu->pru_soreceive, soreceive); >+ DEFAULT(pu->pru_sopoll, sopoll); >+ DEFAULT(pu->pru_sosetlabel, pru_sosetlabel_null); >+#undef DEFAULT >+ if (pr->pr_init) >+ (*pr->pr_init)(); >+} >+ > /* > * Add a new protocol domain to the list of supported domains > * Note: you cant unload it again because a socket may be using it. >@@ -106,33 +134,11 @@ > net_init_domain(struct domain *dp) > { > struct protosw *pr; >- struct pr_usrreqs *pu; > > if (dp->dom_init) > (*dp->dom_init)(); >- for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++){ >- pu = pr->pr_usrreqs; >- KASSERT(pu != NULL, >- ("domaininit: %ssw[%d] has no usrreqs!", >- dp->dom_name, (int)(pr - dp->dom_protosw))); >-#define DEFAULT(foo, bar) if ((foo) == NULL) (foo) = (bar) >- DEFAULT(pu->pru_accept, pru_accept_notsupp); >- DEFAULT(pu->pru_connect, pru_connect_notsupp); >- DEFAULT(pu->pru_connect2, pru_connect2_notsupp); >- DEFAULT(pu->pru_control, pru_control_notsupp); >- DEFAULT(pu->pru_listen, pru_listen_notsupp); >- DEFAULT(pu->pru_rcvd, pru_rcvd_notsupp); >- DEFAULT(pu->pru_rcvoob, pru_rcvoob_notsupp); >- DEFAULT(pu->pru_sense, pru_sense_null); >- DEFAULT(pu->pru_sosend, sosend); >- DEFAULT(pu->pru_soreceive, soreceive); >- DEFAULT(pu->pru_sopoll, sopoll); >- DEFAULT(pu->pru_sosetlabel, pru_sosetlabel_null); >-#undef DEFAULT >- >- if (pr->pr_init) >- (*pr->pr_init)(); >- } >+ for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++) >+ protosw_init(pr); > /* > * update global information about maximums > */ >@@ -298,8 +304,7 @@ > mtx_unlock(&Giant); > > /* Initialize and activate the protocol. */ >- if (fpr->pr_init) >- (fpr->pr_init)(); >+ protosw_init(fpr); > > return (0); > } > >--J2SCkAp4GZ/dPZZf-- > -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence.