| From eebb8034a5be8c2177cbf07ca2ecd2ff8a058958 Mon Sep 17 00:00:00 2001 |
| From: Joerg Roedel <jroedel@suse.de> |
| Date: Mon, 4 Apr 2016 15:47:48 +0200 |
| Subject: iommu: Don't overwrite domain pointer when there is no default_domain |
| |
| From: Joerg Roedel <jroedel@suse.de> |
| |
| commit eebb8034a5be8c2177cbf07ca2ecd2ff8a058958 upstream. |
| |
| IOMMU drivers that do not support default domains, but make |
| use of the the group->domain pointer can get that pointer |
| overwritten with NULL on device add/remove. |
| |
| Make sure this can't happen by only overwriting the domain |
| pointer when it is NULL. |
| |
| Fixes: 1228236de5f9 ('iommu: Move default domain allocation to iommu_group_get_for_dev()') |
| Signed-off-by: Joerg Roedel <jroedel@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/iommu/iommu.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/iommu/iommu.c |
| +++ b/drivers/iommu/iommu.c |
| @@ -848,7 +848,8 @@ struct iommu_group *iommu_group_get_for_ |
| if (!group->default_domain) { |
| group->default_domain = __iommu_domain_alloc(dev->bus, |
| IOMMU_DOMAIN_DMA); |
| - group->domain = group->default_domain; |
| + if (!group->domain) |
| + group->domain = group->default_domain; |
| } |
| |
| ret = iommu_group_add_device(group, dev); |