Messages in this thread | | | Date | Sun, 27 May 2012 09:41:26 +0800 | From | Jiang Liu <> | Subject | Re: [PATCH] x86: check for valid irq_cfg pointer in smp_irq_move_cleanup_interrupt |
| |
I have realized the same issue with typical usages of for_each_irq_desc(), which may access freed memory with SPARSE_IRQ. My naive solution was to avoid freeing irq_desc even SPARSE_IRQ_ is enabled.
for_each_irq_desc(i, desc) { raw_spin_lock_irq(&desc->lock);
On 05/26/2012 06:18 PM, Thomas Gleixner wrote: > On Fri, 25 May 2012, Suresh Siddha wrote: >> On Thu, 2012-05-24 at 21:16 +0200, Thomas Gleixner wrote: >> There are other (not-so common) irq desc references, like in the >> show_interrupts() (cat /proc/interrupts path) etc, that does things like >> this in the process context: >> >> desc = irq_to_desc(i); >> if (!desc) >> return 0; >> >> raw_spin_lock_irqsave(&desc->lock, flags); >> >> May be we should introduce something like >> get_irq_desc_locked()/put_irq_desc_locked() that can safely access the >> irq desc with pre-emption/irq's disabled and lock it etc. And the >> synchronize_sched() will enable the destroy_irq()/free_desc() to free it >> safely etc. > > I want to avoid that and instead use proper refcounting. The reason is > that we want to move the irq descriptor when the affinity changes > nodes, and for that we need refcounting anyway. > > Thanks, > > tglx > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/
| |