Prev: [PATCH 5/6] mqueue: fix typo "failues" -> "failures"
Next: [PATCH 6/6] mqueue: fix mq_open() file descriptor leak on user-space processes
From: Carsten Emde on 24 Feb 2010 02:20 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(a)gmail.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(a)osadl.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(a)vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ |