• Robin Murphy's avatar
    iommu: Handle default domain attach failure · 797a8b4d
    Robin Murphy authored
    We wouldn't normally expect ops->attach_dev() to fail, but on IOMMUs
    with limited hardware resources, or generally misconfigured systems,
    it is certainly possible. We report failure correctly from the external
    iommu_attach_device() interface, but do not do so in iommu_group_add()
    when attaching to the default domain. The result of failure there is
    that the device, group and domain all get left in a broken,
    part-configured state which leads to weird errors and misbehaviour down
    the line when IOMMU API calls sort-of-but-don't-quite work.
    
    Check the return value of __iommu_attach_device() on the default domain,
    and refactor the error handling paths to cope with its failure and clean
    up correctly in such cases.
    
    Fixes: e39cb8a3 ("iommu: Make sure a device is always attached to a domain")
    Reported-by: default avatarPunit Agrawal <punit.agrawal@arm.com>
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    797a8b4d
iommu.c 42.7 KB