* [PATCH] x86: Plug memory leak in sparse irq
@ 2010-09-28 18:57 Thomas Gleixner
[not found] ` <AANLkTi=940qOigieOHd_cBcocBAb4AtYnm2v60i9CSmp@mail.gmail.com>
0 siblings, 1 reply; 3+ messages in thread
From: Thomas Gleixner @ 2010-09-28 18:57 UTC (permalink / raw)
To: LKML; +Cc: x86, Yinghai Lu
free_irq_cfg() is not freeing the cpumask_vars in irq_cfg.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: stable@kernel.org
---
arch/x86/kernel/apic/io_apic.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Index: linux-2.6/arch/x86/kernel/apic/io_apic.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c
+++ linux-2.6/arch/x86/kernel/apic/io_apic.c
@@ -311,9 +311,11 @@ void arch_init_copy_chip_data(struct irq
init_copy_irq_2_pin(old_cfg, cfg, node);
}
-static void free_irq_cfg(struct irq_cfg *old_cfg)
+static void free_irq_cfg(struct irq_cfg *cfg)
{
- kfree(old_cfg);
+ free_cpumask_var(cfg->domain);
+ free_cpumask_var(cfg->old_domain);
+ kfree(cfg);
}
void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc)
^ permalink raw reply [flat|nested] 3+ messages in thread[parent not found: <AANLkTi=940qOigieOHd_cBcocBAb4AtYnm2v60i9CSmp@mail.gmail.com>]
* Re: Fwd: [PATCH] x86: Plug memory leak in sparse irq [not found] ` <AANLkTi=940qOigieOHd_cBcocBAb4AtYnm2v60i9CSmp@mail.gmail.com> @ 2010-09-28 21:30 ` Yinghai Lu 2010-09-28 21:35 ` Thomas Gleixner 0 siblings, 1 reply; 3+ messages in thread From: Yinghai Lu @ 2010-09-28 21:30 UTC (permalink / raw) To: Thomas Gleixner, Ingo Molnar, H. Peter Anvin, linux-kernel@vger.kernel.org > From: Thomas Gleixner <tglx@linutronix.de> > Date: Tue, Sep 28, 2010 at 11:57 AM > Subject: [PATCH] x86: Plug memory leak in sparse irq > To: LKML <linux-kernel@vger.kernel.org> > Cc: x86@kernel.org, Yinghai Lu <yhlu.kernel@gmail.com> > > > free_irq_cfg() is not freeing the cpumask_vars in irq_cfg. > > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: stable@kernel.org > --- > arch/x86/kernel/apic/io_apic.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > Index: linux-2.6/arch/x86/kernel/apic/io_apic.c > =================================================================== > --- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c > +++ linux-2.6/arch/x86/kernel/apic/io_apic.c > @@ -311,9 +311,11 @@ void arch_init_copy_chip_data(struct irq > init_copy_irq_2_pin(old_cfg, cfg, node); > } > > -static void free_irq_cfg(struct irq_cfg *old_cfg) > +static void free_irq_cfg(struct irq_cfg *cfg) > { > - kfree(old_cfg); > + free_cpumask_var(cfg->domain); > + free_cpumask_var(cfg->old_domain); > + kfree(cfg); > } > > void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc) yes. still need [PATCH] x86: copy cpumask while copying chip_data for offstack cpumask While looking Thomas's | x86: Plug memory leak in sparse irq found copy_chip_data() could copy the cpumask pointers instead of real data. Need to use cpumask_copy there. Signed-off-by: Yinghai Lu <yinghai@kernel.org> Cc: stable@kernel.org --- arch/x86/kernel/apic/io_apic.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) Index: linux-2.6/arch/x86/kernel/apic/io_apic.c =================================================================== --- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c +++ linux-2.6/arch/x86/kernel/apic/io_apic.c @@ -306,7 +306,10 @@ void arch_init_copy_chip_data(struct irq old_cfg = old_desc->chip_data; - memcpy(cfg, old_cfg, sizeof(struct irq_cfg)); + cfg->vector = old_cfg->vector; + cfg->move_in_progress = old_cfg->move_in_progress; + cpumask_copy(cfg->domain, old_cfg->domain); + cpumask_copy(cfg->old_domain, old_cfg->old_domain); init_copy_irq_2_pin(old_cfg, cfg, node); } ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: Fwd: [PATCH] x86: Plug memory leak in sparse irq 2010-09-28 21:30 ` Fwd: " Yinghai Lu @ 2010-09-28 21:35 ` Thomas Gleixner 0 siblings, 0 replies; 3+ messages in thread From: Thomas Gleixner @ 2010-09-28 21:35 UTC (permalink / raw) To: Yinghai Lu; +Cc: Ingo Molnar, H. Peter Anvin, linux-kernel@vger.kernel.org On Tue, 28 Sep 2010, Yinghai Lu wrote: > > From: Thomas Gleixner <tglx@linutronix.de> > > Date: Tue, Sep 28, 2010 at 11:57 AM > > Subject: [PATCH] x86: Plug memory leak in sparse irq > > To: LKML <linux-kernel@vger.kernel.org> > > Cc: x86@kernel.org, Yinghai Lu <yhlu.kernel@gmail.com> > > > > > > free_irq_cfg() is not freeing the cpumask_vars in irq_cfg. > > > > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > > Cc: stable@kernel.org > > --- > > arch/x86/kernel/apic/io_apic.c | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > Index: linux-2.6/arch/x86/kernel/apic/io_apic.c > > =================================================================== > > --- linux-2.6.orig/arch/x86/kernel/apic/io_apic.c > > +++ linux-2.6/arch/x86/kernel/apic/io_apic.c > > @@ -311,9 +311,11 @@ void arch_init_copy_chip_data(struct irq > > init_copy_irq_2_pin(old_cfg, cfg, node); > > } > > > > -static void free_irq_cfg(struct irq_cfg *old_cfg) > > +static void free_irq_cfg(struct irq_cfg *cfg) > > { > > - kfree(old_cfg); > > + free_cpumask_var(cfg->domain); > > + free_cpumask_var(cfg->old_domain); > > + kfree(cfg); > > } > > > > void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc) > > yes. still need Was about to send that out next. > [PATCH] x86: copy cpumask while copying chip_data for offstack cpumask > > While looking Thomas's > | x86: Plug memory leak in sparse irq > > found copy_chip_data() could copy the cpumask pointers instead of real data. > Need to use cpumask_copy there. Sigh. That code should just depend on CONFIG_BROKEN, really. Thanks, tglx ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-09-28 21:36 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-28 18:57 [PATCH] x86: Plug memory leak in sparse irq Thomas Gleixner
[not found] ` <AANLkTi=940qOigieOHd_cBcocBAb4AtYnm2v60i9CSmp@mail.gmail.com>
2010-09-28 21:30 ` Fwd: " Yinghai Lu
2010-09-28 21:35 ` Thomas Gleixner
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.