From: Nicolin Chen nicolinc@nvidia.com Sent: Tuesday, October 22, 2024 8:19 AM
+static struct iommufd_hwpt_nested * +iommufd_hwpt_nested_alloc_for_viommu(struct iommufd_viommu *viommu,
const struct iommu_user_data *user_data)
probably "_for" can be skipped to reduce the name length
+{
- struct iommufd_hwpt_nested *hwpt_nested;
- struct iommufd_hw_pagetable *hwpt;
- int rc;
- if (!viommu->ops || !viommu->ops->domain_alloc_nested)
return ERR_PTR(-EOPNOTSUPP);
- hwpt_nested = __iommufd_object_alloc(
viommu->ictx, hwpt_nested, IOMMUFD_OBJ_HWPT_NESTED,
common.obj);
- if (IS_ERR(hwpt_nested))
return ERR_CAST(hwpt_nested);
- hwpt = &hwpt_nested->common;
- hwpt_nested->viommu = viommu;
- hwpt_nested->parent = viommu->hwpt;
- refcount_inc(&viommu->obj.users);
- hwpt->domain = viommu->ops->domain_alloc_nested(viommu,
user_data);
- if (IS_ERR(hwpt->domain)) {
rc = PTR_ERR(hwpt->domain);
hwpt->domain = NULL;
goto out_abort;
- }
- hwpt->domain->owner = viommu->iommu_dev->ops;
- if (WARN_ON_ONCE(hwpt->domain->type !=
IOMMU_DOMAIN_NESTED)) {
rc = -EINVAL;
goto out_abort;
- }
- return hwpt_nested;
+out_abort:
- iommufd_object_abort_and_destroy(viommu->ictx, &hwpt->obj);
- return ERR_PTR(rc);
+}
looks there missed a check on flags in this path.