Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 26 Dec 1997 19:12:13 +1100
From:      Bruce Evans <bde@zeta.org.au>
To:        dg@root.com, julian@whistle.com
Cc:        current@FreeBSD.ORG, gjp@erols.com
Subject:   Re: crash (in networking code?)
Message-ID:  <199712260812.TAA11683@godzilla.zeta.org.au>

next in thread | raw e-mail | index | archive | help
>I think this is a worry. I need to check a bunch of code against 
>this possibility. (MALLOC in splnet allowing un-expected re-enterence)

I hope there are no reentrance bugs.  Invalidation of objects that you
think you own is bad enough.

I use the following to find bogus M_WAITOK malloc()s.  It complained about
problems in all of the recently fixed areas (2 in netinet, one in accept1().

Bruce

diff -c2 kern_malloc.c~ kern_malloc.c
*** kern_malloc.c~	Fri Dec  5 23:25:33 1997
--- kern_malloc.c	Fri Dec 26 14:02:11 1997
***************
*** 1,2 ****
--- 1,6 ----
+ static volatile int dbm_db = 0;
+ static volatile int dbm_ipl = 0; /* change to 0xc0020000 to hide splnet bugs */
+ static volatile int dbm_sleep = 0;
+ 
  /*
   * Copyright (c) 1987, 1991, 1993
***************
*** 127,130 ****
--- 137,153 ----
  	kbp = &bucket[indx];
  	s = splhigh();
+ #if 1
+ 	if (!cold && !(flags & M_NOWAIT) && s != 0x80000000 && s != dbm_ipl) {
+ #elif 0
+ 	if (!cold && !(flags & M_NOWAIT) && s & 0x0000ffff) {
+ #else
+ 	if (!cold && !(flags & M_NOWAIT) && s == 0xffffffff) {
+ #endif
+ 		printf("malloc(..., M_NOWAIT) called at high ipl %#x\n", s);
+ 		if (dbm_db)
+ 			Debugger("");
+ 		if (dbm_sleep)
+ 			tsleep((caddr_t)ksp, PSWP+2, type->ks_shortdesc, 1);
+ 	}
  	while (ksp->ks_memuse >= ksp->ks_limit) {
  		if (flags & M_NOWAIT) {



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