mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-15 23:41:35 -04:00
iommu: Fix NULL group->domain dereference in pci_dev_reset_iommu_done()
Local sashiko review pointed it out that group->domain could be NULL when
a default domain fails to allocate during the first probe, which can crash
at domain->ops->attach_dev dereference in __iommu_attach_device() invoked
by pci_dev_reset_iommu_done().
pci_dev_reset_iommu_prepare() is fine as an old_domain pointer can be NULL.
Skip the re-attach in pci_dev_reset_iommu_done() to fix the bug.
Fixes: c279e83953 ("iommu: Introduce pci_dev_reset_iommu_prepare/done()")
Cc: stable@vger.kernel.org
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
This commit is contained in:
committed by
Joerg Roedel
parent
07d0f496fe
commit
d769711fcd
@@ -4073,8 +4073,13 @@ void pci_dev_reset_iommu_done(struct pci_dev *pdev)
|
||||
if (WARN_ON(!group->blocking_domain))
|
||||
return;
|
||||
|
||||
/* Re-attach RID domain back to group->domain */
|
||||
if (group->domain != group->blocking_domain) {
|
||||
/*
|
||||
* Re-attach RID domain back to group->domain
|
||||
*
|
||||
* Leave the device parked in the blocking_domain if group->domain isn't
|
||||
* initialized yet
|
||||
*/
|
||||
if (group->domain && group->domain != group->blocking_domain) {
|
||||
WARN_ON(__iommu_attach_device(group->domain, &pdev->dev,
|
||||
group->blocking_domain));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user