• Marc Zyngier's avatar
    irqchip/gic-v3-its: Plug allocation race for devices sharing a DevID · 9791ec7d
    Marc Zyngier authored
    On systems or VMs where multiple devices share a single DevID
    (because they sit behind a PCI bridge, or because the HW is
    broken in funky ways), we reuse the save its_device structure
    in order to reflect this.
    
    It turns out that there is a distinct lack of locking when looking
    up the its_device, and two device being probed concurrently can result
    in double allocations. That's obviously not nice.
    
    A solution for this is to have a per-ITS mutex that serializes device
    allocation.
    
    A similar issue exists on the freeing side, which can run concurrently
    with the allocation. On top of now taking the appropriate lock, we
    also make sure that a shared device is never freed, as we have no way
    to currently track the life cycle of such object.
    Reported-by: default avatarZheng Xiang <zhengxiang9@huawei.com>
    Tested-by: default avatarZheng Xiang <zhengxiang9@huawei.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    9791ec7d
irq-gic-v3-its.c 97.6 KB