• Sebastian Frias's avatar
    genirq/generic_chip: Verify irqs_per_chip <= 32 · f88eecfe
    Sebastian Frias authored
    Most (if not all) code here implicitly assumes that the maximum number of
    IRQs per chip will be 32, and thus uses 'u32' or 'unsigned long' for many
    tasks (for example "struct irq_data" declares its 'mask' field as 'u32',
    and "struct irq_chip_generic" declares its 'installed' field as 'unsigned
    long')
    
    However, there is no check to verify that irqs_per_chip is <= 32.  Hence,
    calling irq_alloc_domain_generic_chips() with a bigger value will result in
    unexpected results.
    
    Provide a wrapper with a MAYBE_BUILD_BUG_ON(nrirqs >= 32) to catch such
    cases.
    
    [ tglx: Reduced changelog to the essential information ]
    Signed-off-by: default avatarSebastian Frias <sf84@laposte.net>
    Cc: Marc Zyngier <marc.zyngier@arm.com>
    Cc: Mason <slash.tmp@free.fr>
    Cc: Jason Cooper <jason@lakedaemon.net>
    Link: http://lkml.kernel.org/r/57B31D94.5040701@laposte.netSigned-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    f88eecfe
generic-chip.c 15.7 KB