Date: Thu, 07 Oct 2004 22:57:38 +0200 From: Andre Oppermann <andre@freebsd.org> To: Sam <sah@softcardsystems.com> Cc: freebsd-arch@freebsd.org Subject: Re: sys/net/netisr.c Message-ID: <4165ADC2.70D2F0C1@freebsd.org> References: <Pine.LNX.4.60.0410071517280.27949@athena>
next in thread | previous in thread | raw e-mail | index | archive | help
Sam wrote:
>
> Hello -
>
> I think I've found a bug in -- and have a question about
> the overall stability of -- sys/net/netisr.c (5.2.1 branch).
This particular bug has already been fixed in 5.3 and 6.0-current.
You should do your development on either RELENG_5 or MAIN. The
5.2.1 branch was only a technology demo and the areas you are
concerned with have changed significantly (read: really a lot).
RELENG_5 (5.3) will be the next stable branch which features
future binary compatibility within further > 5.x releases.
--
Andre
> My AoE module calls netisr_register on load, netisr_unregister
> on unload. Netisr_unregister fails to clear the ni->ni_queue
> pointer and the next received frame gets queued up to a page
> fault. Pretty easy to fix:
>
> --- src/sys/net/netisr.c Sat Nov 8 17:28:39 2003
> +++ src2/sys/net/netisr.c Thu Oct 7 15:03:39 2004
> @@ -103,6 +103,7 @@
> ni->ni_handler = NULL;
> if (ni->ni_queue != NULL)
> IF_DRAIN(ni->ni_queue);
> + ni->ni_queue = NULL;
> }
>
> struct isrstat {
>
> Looking at the code, though, I don't see why I can't
> cause something just as ugly to happen anyway. Suppose
> the following: cpu0 starts processing an inbound frame
> while cpu1 unloads module (calling netisr_unregister).
> It *seems* possible for cpu0 to get a pointer to the
> queue, then cpu1 unload the module completely, causing
> cpu0 to page fault on the queue address.
>
> I don't claim to understand the context in which
> netisr_dispatch is called, so perhaps I'm off base,
> but shouldn't there be a mutex protecting against this?
>
> Please prove me wrong.
>
> Sam
>
> _______________________________________________
> freebsd-arch@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-arch
> To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4165ADC2.70D2F0C1>
