• Frank Wunderlich's avatar
    iommu: Check if group is NULL before remove device · 5aa95d88
    Frank Wunderlich authored
    If probe_device is failing, iommu_group is not initialized because
    iommu_group_add_device is not reached, so freeing it will result
    in NULL pointer access.
    
    iommu_bus_init
      ->bus_iommu_probe
          ->probe_iommu_group in for each:/* return -22 in fail case */
              ->iommu_probe_device
                  ->__iommu_probe_device       /* return -22 here.*/
                      -> ops->probe_device          /* return -22 here.*/
                      -> iommu_group_get_for_dev
                            -> ops->device_group
                            -> iommu_group_add_device //good case
      ->remove_iommu_group  //in fail case, it will remove group
         ->iommu_release_device
             ->iommu_group_remove_device // here we don't have group
    
    In my case ops->probe_device (mtk_iommu_probe_device from
    mtk_iommu_v1.c) is due to failing fwspec->ops mismatch.
    
    Fixes: d72e31c9 ("iommu: IOMMU Groups")
    Signed-off-by: default avatarFrank Wunderlich <frank-w@public-files.de>
    Link: https://lore.kernel.org/r/20210731074737.4573-1-linux@fw-web.deSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    5aa95d88
iommu.c 81.8 KB