Date: Tue, 17 Apr 2001 14:53:09 -0700 (PDT) From: Matt Dillon <dillon@earth.backplane.com> To: Terry Lambert <tlambert@primenet.com> Cc: current@FreeBSD.ORG Subject: Re: BAD BUG: Second try Message-ID: <200104172153.f3HLr9s09698@earth.backplane.com> References: <200104172037.NAA27919@usr09.primenet.com>
index | next in thread | previous in thread | raw e-mail
:Oops.
:
:NOTE: I don't follow this lists for weeks at a time, so please
:include me directly in any responses. Thanks.
:
:Matt Dillon was looking at this, but I haven't heard from him
:for a while on it.
:
:Here is a patch to make it panic, instead of really, really
:trashing memory (ignore the version, I'm using a vendor import
:locally); the patch is to "crfree() and should be obvious:
Sorry, ran out of time on the weekend. It's still on my TODO list.
-Matt
:===================================================================
:diff -c -r1.2 kern_prot.c
:*** kern/kern_prot.c 2001/03/21 02:33:03 1.2
:--- kern/kern_prot.c 2001/04/17 02:22:48
:***************
:*** 1001,1006 ****
:--- 1001,1009 ----
: int s;
:
: s = splhigh();
:+ if ( cr->cr_ref == 0) {
:+ panic("Freeing already free credential!\n");
:+ }
: if (--cr->cr_ref == 0) {
: /*
: * Some callers of crget(), such as nfs_statfs(),
:===================================================================
:
:
:Unfortunately, There's also a nameidata structure (it's the
:only data structure that's exactly 72 bytes long, which I was
:able to determine by printing sizeof() information for all
:kernel structures, and gre'ping for "72") getting freed and
:then either continued to be used, or being used as a result
:of an unchecked allocation failure (I'm still looking for
:that one).
:
:Basically, the second causes invariants to whine about data
:modified on the freelist to my console, while the first one
:results in an eventual panic dues to spammed memory (for the
:obvious reason that you can't free the same thing twice).
:
:The problems only become obvious when you open and then close
:around 30,000 TCP connections; sometimes it takes a couple of
:tries before it panics your machine.
:
:I have some programs that demonstrate the bug, if anyone is
:interested in repeating it on their machines locally (you will
:need appropriate open file limits and bump up to 40,000 or so
:net.inet.ip.portrange.last, e.g.:
:
: sysctl -w net.inet.ip.portrange.last=45000
:
:Which means your box will need about a gig of memory.
:
:
: Terry Lambert
: terry@lambert.org
:---
:Any opinions in this posting are my own and not those of my present
:or previous employers.
:
:To Unsubscribe: send mail to majordomo@FreeBSD.org
:with "unsubscribe freebsd-current" in the body of the message
:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200104172153.f3HLr9s09698>
