Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 9 Sep 2001 09:49:59 +0900
From:      neckpain@nettaxi.com
To:        cc@devcon.net
Cc:        roam@FreeBSD.ORG, current@FreeBSD.ORG
Subject:   Re: problem with dynamic sysctls in -current
Message-ID:  <200109090052.RAA03215@taxismtp2.alchemyfx.com>
In-Reply-To: <Pine.BSF.4.33.0109082222050.1392-100000@albert.gate5.de>
References:  <Pine.BSF.4.33.0109082222050.1392-100000@albert.gate5.de>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Sep 08, 2001 at 10:27:10PM +0200, Christian Carstensen wrote:
> 
> hmm,
> 
> i've posted the attached mail a week ago to this list, but got no
> response. could someone please comment on this issue?

I've also posted a patch(much less refined than yours, though) last month
but still got no response. Maybe you need to talk to the person who committed
rev 1.112 of kern_sysctl.c ?


> ---------- Forwarded message ----------
> Date: Sat, 1 Sep 2001 03:26:46 +0200 (CEST)
> From: Christian Carstensen <cc@devcon.net>
> To: current@freebsd.org
> Subject: dynamic sysctl problem and proposed hot fix
> 
> 
> hi,
> 
> i just came across a problem with dynamic sysctls:
> when unloading a driver module that used dyn sysctls, my system paniced
> with "oid too high". that problem is caused by sysctl_ctx_free() in
> kern/kern_sysctl.c, that first deregisters all oids in the list to see if
> a error occurs. then, all oids are being reregistered and, if there was no
> error, they're finally removed.
> during the second phase, sysctl_register_oid(e1->entry) is called with
> n := e1->entry->oid_number being the old oid number with n > CTL_AUTO_START.
> that leads to panic("static sysctl too high") in sysctl_register_oid.
> one approach might be to initialize the oid_number field to contain the
> value OID_AUTO before calling sysctl_regiser_oid, but i'm unsure about the
> side effects of doing that in sysctl_ctx_free().
> alternatively, the "old" oid number could be reused, the following patch
> should do, but it's just a workaround.
> 
> 
> best,
>   christian
> 
> --
> "Sorry, no defects found. Please try a different search"
>                           [http://www.cisco.com/support/bugtools/bugtool.shtml]
> 
> 
> Index: kern_sysctl.c
> ===================================================================
> RCS file: /usr/cvs/src/sys/kern/kern_sysctl.c,v
> retrieving revision 1.113
> diff -r1.113 kern_sysctl.c
> 83a84,96
> > static struct sysctl_oid *
> > sysctl_find_oidnumber(const int number, struct sysctl_oid_list *list)
> > {
> >       struct sysctl_oid *oidp;
> >
> >       SLIST_FOREACH(oidp, list, oid_link) {
> >               if (oidp->oid_number == number) {
> >                       return (oidp);
> >               }
> >       }
> >       return (NULL);
> > }
> >
> 125c138,139
> <               panic("static sysctl oid too high: %d", oidp->oid_number);
> ---
> >               if (sysctl_find_oidnumber(oidp->oid_number, parent))
> >                       panic("static sysctl oid too high: %d", oidp->oid_number);
> 177c191
> <               if (error)
> ---
> >               if (error)

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




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