[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4B84CFCB.4010001@osadl.org>
Date: Wed, 24 Feb 2010 08:05:47 +0100
From: Carsten Emde <Carsten.Emde@...dl.org>
To: Dan Carpenter <error27@...il.com>,
Thomas Gleixner <tglx@...utronix.de>,
LKML <linux-kernel@...r.kernel.org>,
rt-users <linux-rt-users@...r.kernel.org>,
Ingo Molnar <mingo@...e.hu>,
Steven Rostedt <rostedt@...dmis.org>,
Peter Zijlstra <peterz@...radead.org>,
Clark Williams <williams@...hat.com>,
Frank Rowand <frank.rowand@...sony.com>,
Robin Gareus <robin@...eus.org>,
Gregory Haskins <ghaskins@...ell.com>,
Philippe Reynes <philippe.reynes@...smpp.fr>,
Fernando Lopez-Lezcano <nando@...ma.Stanford.EDU>,
Will Schmidt <will_schmidt@...t.ibm.com>,
Darren Hart <dvhltc@...ibm.com>, Jan Blunck <jblunck@...e.de>,
Sven-Thorsten Dietrich <sdietrich@...ell.com>,
Jon Masters <jcm@...hat.com>,
Mark Knecht <markknecht@...il.com>,
John Kacur <jkacur@...hat.com>,
Nick Piggin <nickpiggin@...oo.com.au>
Subject: Re: [patch] latency_hist: fix small memory leak
On 02/22/2010 02:27 PM, Dan Carpenter wrote:
> index_ptr needs to be freed on the error path.
>
> Signed-off-by: Dan Carpenter <error27@...il.com>
>
> diff --git a/kernel/trace/latency_hist.c b/kernel/trace/latency_hist.c
> index b3b5ea2..8edc70c 100644
> --- a/kernel/trace/latency_hist.c
> +++ b/kernel/trace/latency_hist.c
> @@ -204,8 +204,10 @@ static void *l_start(struct seq_file *m, loff_t *pos)
> , my_hist->beyond_hist_bound_samples
> , MAX_ENTRY_NUM, "samples");
> }
> - if (index >= MAX_ENTRY_NUM)
> + if (index >= MAX_ENTRY_NUM) {
> + kfree(index_ptr);
> return NULL;
> + }
>
> *index_ptr = index;
> return index_ptr;
Thanks a lot for spotting this leak. We even don't need to allocate the
memory, if index >= MAX_ENTRY_NUM.
This patch applies to 2.6.31.12-rt21 and 2.6.33-rc8-rt (rt/head).
Signed-off-by: Carsten Emde <C.Emde@...dl.org>
Index: head/kernel/trace/latency_hist.c
===================================================================
--- head.orig/kernel/trace/latency_hist.c
+++ head/kernel/trace/latency_hist.c
@@ -218,13 +218,10 @@ void notrace latency_hist(int latency_ty
static void *l_start(struct seq_file *m, loff_t *pos)
{
- loff_t *index_ptr = kmalloc(sizeof(loff_t), GFP_KERNEL);
+ loff_t *index_ptr = NULL;
loff_t index = *pos;
struct hist_data *my_hist = m->private;
- if (!index_ptr)
- return NULL;
-
if (index == 0) {
char minstr[32], avgstr[32], maxstr[32];
@@ -263,10 +260,12 @@ static void *l_start(struct seq_file *m,
MAX_ENTRY_NUM - my_hist->offset,
"samples");
}
- if (index >= MAX_ENTRY_NUM)
- return NULL;
+ if (index < MAX_ENTRY_NUM) {
+ index_ptr = kmalloc(sizeof(loff_t), GFP_KERNEL);
+ if (index_ptr)
+ *index_ptr = index;
+ }
- *index_ptr = index;
return index_ptr;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists