[openib-general] Re: [PATCH] core: fix user_mad memory leaks on timeout

Michael S. Tsirkin mst at mellanox.co.il
Thu Dec 8 07:25:21 PST 2005


Quoting r. Hal Rosenstock <halr at voltaire.com>:
> Subject: Re: [PATCH] core: fix user_mad memory leaks on timeout
> 
> On Thu, 2005-12-08 at 08:51, Michael S. Tsirkin wrote:
> > Dont leak packet if it had a timeout.
> > Dont leak timeout mad if queue_packet fails.
> > 
> > Signed-off-by: Jack Morgenstein <jackm at mellanox.co.il>
> > Signed-off-by: Michael S. Tsirkin <mst at mellanox.co.il>
> > 
> > Index: openib/drivers/infiniband/core/user_mad.c
> > ===================================================================
> > --- openib.orig/drivers/infiniband/core/user_mad.c	2005-12-08
> 15:40:41.000000000 +0200
> > +++ openib/drivers/infiniband/core/user_mad.c	2005-12-08
> 15:40:28.000000000 +0200
> > @@ -197,8 +197,8 @@ static void send_handler(struct ib_mad_a
> >  		memcpy(timeout->mad.data, packet->mad.data,
> >  		       sizeof (struct ib_mad_hdr));
> >  
> > -		if (!queue_packet(file, agent, timeout))
> > -				return;
> > +		if (queue_packet(file, agent, timeout))
> > +			kfree(timeout);
> 
> Yes, there appears to be a memory leak here but I don't think this fix
> is quite right as it has lost the return when the queue_packet succeeds.
> Isn't that still needed ?

No, the return here was wrong: we copied the packet
and we need to free it anyway
so falling through to kfree below is the correct behaviour.
Thats what I mean by "Dont leak packet if it had a timeout".

> 		if (!queue_packet(file, agent, timeout))
> 			return;
> 		kfree(timeout);
> 
> >  	}
> >  out:
> >  	kfree(packet);
> 
> Another point: on either failure to allocate the timeout MAD or failure
> to queue the timeout MAD, is simply throwing this away sufficient ? It
> seems to me that if this occurs, then the contract is broken and the
> client still needs to worry about its own timeout.
> 
> -- Hal
> 

Not much to do though, since allocating memory with gfp kernel fails:
lets at least be careful to avoid a crash or memory leak.

-- 
MST



More information about the general mailing list