• Anna-Maria Gleixner's avatar
    iommu/amd: Prevent possible null pointer dereference and infinite loop · ea3fd040
    Anna-Maria Gleixner authored
    The check for !dev_data->domain in __detach_device() emits a warning and
    returns. The calling code in detach_device() dereferences dev_data->domain
    afterwards unconditionally, so in case that dev_data->domain is NULL the
    warning will be immediately followed by a NULL pointer dereference.
    
    The calling code in cleanup_domain() loops infinite when !dev_data->domain
    and the check in __detach_device() returns immediately because dev_list is
    not changed.
    
    do_detach() duplicates this check without throwing a warning.
    
    Move the check with the explanation of the do_detach() code into the caller
    detach_device() and return immediately. Throw an error, when hitting the
    condition in cleanup_domain().
    Signed-off-by: default avatarAnna-Maria Gleixner <anna-maria@linutronix.de>
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    ea3fd040
amd_iommu.c 103 KB