Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Jan 2004 10:26:13 -0700
From:      Scott Long <scottl@freebsd.org>
To:        Ruslan Ermilov <ru@FreeBSD.org>
Cc:        hackers@FreeBSD.org
Subject:   Re: [CHECKER] bugs in FreeBSD
Message-ID:  <400AC1B5.4080407@freebsd.org>
In-Reply-To: <20040118132304.GE29936@FreeBSD.org.ua>
References:  <Pine.LNX.4.44.0401161607260.26554-100000@Xenon.Stanford.EDU> <20040118124502.GD29936@FreeBSD.org.ua> <20040118132304.GE29936@FreeBSD.org.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
Looks good to me if you want to commit it, thanks!

Scott

Ruslan Ermilov wrote:
> On Sun, Jan 18, 2004 at 02:45:02PM +0200, Ruslan Ermilov wrote:
> 
>>Scott,
>>
>>Attached is the patch that fixes memory leak according to the below report.
>>
> 
> Attached is the corrected patch that doesn't do a waiting malloc()
> while interrupts are blocked.  Yes I know that splbio() is a no-op
> these days.  ;)
> 
> 
>>On Fri, Jan 16, 2004 at 04:09:34PM -0800, Paul Twohey wrote:
>>
>>>---------------------------------------------------------
>>>[BUG]  though we should demote things that are not locals.
>>>/u2/engler/mc/freebsd/sys/i386/compile/GENERIC/../../../dev/ips/ips.c:148:ips_add_waiting_command:ERROR:LEAK:148:154: pointer=waiter from RO=malloc(-1) [s=550,pop=551,pr=1.00] [rank=med] leaked! [z=1.0] [success=5]
>>>
>>>	ips_command_t *command;
>>>	ips_wait_list_t *waiter;
>>>	unsigned long memflags = 0;
>>>	if(IPS_NOWAIT_FLAG & flags)
>>>		memflags = M_NOWAIT;
>>>Start --->
>>>	waiter = malloc(sizeof(ips_wait_list_t), M_DEVBUF, memflags);
>>>	if(!waiter)
>>>		return ENOMEM;
>>>	mask = splbio();
>>>	if(sc->state & IPS_OFFLINE){
>>>		splx(mask);
>>>Error --->
>>>		return EIO;
>>>	}
>>>	command = SLIST_FIRST(&sc->free_cmd_list);
>>>	if(command && !(sc->state & IPS_TIMEOUT)){
>>>---------------------------------------------------------
> 
> 
> 
> Cheers,
> 
> 
> ------------------------------------------------------------------------
> 
> Index: ips.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/dev/ips/ips.c,v
> retrieving revision 1.6
> diff -u -p -r1.6 ips.c
> --- ips.c	27 Nov 2003 08:37:36 -0000	1.6
> +++ ips.c	18 Jan 2004 13:16:00 -0000
> @@ -169,6 +169,7 @@ static int ips_add_waiting_command(ips_s
>  	mask = splbio();
>  	if(sc->state & IPS_OFFLINE){
>  		splx(mask);
> +		free(waiter, M_DEVBUF);
>  		return EIO;
>  	}
>  	command = SLIST_FIRST(&sc->free_cmd_list);




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