提交 d5951abf 编写于 作者: K Kunkun Jiang 提交者: Zheng Zengkai

Revert "iommu: Introduce attach/detach_pasid_table API"

virt inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I61SPO
CVE: NA

--------------------------------

This reverts commit dbb4844d.
Signed-off-by: NKunkun Jiang <jiangkunkun@huawei.com>
Reviewed-by: NKeqian Zhu <zhukeqian1@huawei.com>
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 6167fe0b
...@@ -2311,56 +2311,6 @@ int iommu_attach_pasid_table(struct iommu_domain *domain, ...@@ -2311,56 +2311,6 @@ int iommu_attach_pasid_table(struct iommu_domain *domain,
} }
EXPORT_SYMBOL_GPL(iommu_attach_pasid_table); EXPORT_SYMBOL_GPL(iommu_attach_pasid_table);
int iommu_uapi_attach_pasid_table(struct iommu_domain *domain,
void __user *uinfo)
{
struct iommu_pasid_table_config pasid_table_data = { 0 };
u32 minsz;
if (unlikely(!domain->ops->attach_pasid_table))
return -ENODEV;
/*
* No new spaces can be added before the variable sized union, the
* minimum size is the offset to the union.
*/
minsz = offsetof(struct iommu_pasid_table_config, vendor_data);
/* Copy minsz from user to get flags and argsz */
if (copy_from_user(&pasid_table_data, uinfo, minsz))
return -EFAULT;
/* Fields before the variable size union are mandatory */
if (pasid_table_data.argsz < minsz)
return -EINVAL;
/* PASID and address granu require additional info beyond minsz */
if (pasid_table_data.version != PASID_TABLE_CFG_VERSION_1)
return -EINVAL;
if (pasid_table_data.format == IOMMU_PASID_FORMAT_SMMUV3 &&
pasid_table_data.argsz <
offsetofend(struct iommu_pasid_table_config, vendor_data.smmuv3))
return -EINVAL;
/*
* User might be using a newer UAPI header which has a larger data
* size, we shall support the existing flags within the current
* size. Copy the remaining user data _after_ minsz but not more
* than the current kernel supported size.
*/
if (copy_from_user((void *)&pasid_table_data + minsz, uinfo + minsz,
min_t(u32, pasid_table_data.argsz, sizeof(pasid_table_data)) - minsz))
return -EFAULT;
/* Now the argsz is validated, check the content */
if (pasid_table_data.config < IOMMU_PASID_CONFIG_TRANSLATE ||
pasid_table_data.config > IOMMU_PASID_CONFIG_ABORT)
return -EINVAL;
return domain->ops->attach_pasid_table(domain, &pasid_table_data);
}
EXPORT_SYMBOL_GPL(iommu_uapi_attach_pasid_table);
void iommu_detach_pasid_table(struct iommu_domain *domain) void iommu_detach_pasid_table(struct iommu_domain *domain)
{ {
if (unlikely(!domain->ops->detach_pasid_table)) if (unlikely(!domain->ops->detach_pasid_table))
......
...@@ -246,12 +246,12 @@ struct iommu_iotlb_gather { ...@@ -246,12 +246,12 @@ struct iommu_iotlb_gather {
* @cache_invalidate: invalidate translation caches * @cache_invalidate: invalidate translation caches
* @sva_bind_gpasid: bind guest pasid and mm * @sva_bind_gpasid: bind guest pasid and mm
* @sva_unbind_gpasid: unbind guest pasid and mm * @sva_unbind_gpasid: unbind guest pasid and mm
* @attach_pasid_table: attach a pasid table
* @detach_pasid_table: detach the pasid table
* @def_domain_type: device default domain type, return value: * @def_domain_type: device default domain type, return value:
* - IOMMU_DOMAIN_IDENTITY: must use an identity domain * - IOMMU_DOMAIN_IDENTITY: must use an identity domain
* - IOMMU_DOMAIN_DMA: must use a dma domain * - IOMMU_DOMAIN_DMA: must use a dma domain
* - 0: use the default setting * - 0: use the default setting
* @attach_pasid_table: attach a pasid table
* @detach_pasid_table: detach the pasid table
* @pgsize_bitmap: bitmap of all possible supported page sizes * @pgsize_bitmap: bitmap of all possible supported page sizes
* @owner: Driver module providing these ops * @owner: Driver module providing these ops
*/ */
...@@ -498,8 +498,6 @@ extern int iommu_sva_unbind_gpasid(struct iommu_domain *domain, ...@@ -498,8 +498,6 @@ extern int iommu_sva_unbind_gpasid(struct iommu_domain *domain,
struct device *dev, ioasid_t pasid); struct device *dev, ioasid_t pasid);
extern int iommu_attach_pasid_table(struct iommu_domain *domain, extern int iommu_attach_pasid_table(struct iommu_domain *domain,
struct iommu_pasid_table_config *cfg); struct iommu_pasid_table_config *cfg);
extern int iommu_uapi_attach_pasid_table(struct iommu_domain *domain,
void __user *udata);
extern void iommu_detach_pasid_table(struct iommu_domain *domain); extern void iommu_detach_pasid_table(struct iommu_domain *domain);
extern struct iommu_domain *iommu_get_domain_for_dev(struct device *dev); extern struct iommu_domain *iommu_get_domain_for_dev(struct device *dev);
extern struct iommu_domain *iommu_get_dma_domain(struct device *dev); extern struct iommu_domain *iommu_get_dma_domain(struct device *dev);
...@@ -1194,13 +1192,6 @@ int iommu_attach_pasid_table(struct iommu_domain *domain, ...@@ -1194,13 +1192,6 @@ int iommu_attach_pasid_table(struct iommu_domain *domain,
return -ENODEV; return -ENODEV;
} }
static inline
int iommu_uapi_attach_pasid_table(struct iommu_domain *domain,
void __user *uinfo)
{
return -ENODEV;
}
static inline static inline
void iommu_detach_pasid_table(struct iommu_domain *domain) {} void iommu_detach_pasid_table(struct iommu_domain *domain) {}
......
...@@ -363,33 +363,30 @@ struct iommu_pasid_smmuv3 { ...@@ -363,33 +363,30 @@ struct iommu_pasid_smmuv3 {
/** /**
* struct iommu_pasid_table_config - PASID table data used to bind guest PASID * struct iommu_pasid_table_config - PASID table data used to bind guest PASID
* table to the host IOMMU * table to the host IOMMU
* @argsz: User filled size of this data
* @version: API version to prepare for future extensions * @version: API version to prepare for future extensions
* @base_ptr: guest physical address of the PASID table
* @format: format of the PASID table * @format: format of the PASID table
* @base_ptr: guest physical address of the PASID table
* @pasid_bits: number of PASID bits used in the PASID table * @pasid_bits: number of PASID bits used in the PASID table
* @config: indicates whether the guest translation stage must * @config: indicates whether the guest translation stage must
* be translated, bypassed or aborted. * be translated, bypassed or aborted.
* @padding: reserved for future use (should be zero) * @padding: reserved for future use (should be zero)
* @vendor_data.smmuv3: table information when @format is * @smmuv3: table information when @format is %IOMMU_PASID_FORMAT_SMMUV3
* %IOMMU_PASID_FORMAT_SMMUV3
*/ */
struct iommu_pasid_table_config { struct iommu_pasid_table_config {
__u32 argsz;
#define PASID_TABLE_CFG_VERSION_1 1 #define PASID_TABLE_CFG_VERSION_1 1
__u32 version; __u32 version;
__u64 base_ptr;
#define IOMMU_PASID_FORMAT_SMMUV3 1 #define IOMMU_PASID_FORMAT_SMMUV3 1
__u32 format; __u32 format;
__u64 base_ptr;
__u8 pasid_bits; __u8 pasid_bits;
#define IOMMU_PASID_CONFIG_TRANSLATE 1 #define IOMMU_PASID_CONFIG_TRANSLATE 1
#define IOMMU_PASID_CONFIG_BYPASS 2 #define IOMMU_PASID_CONFIG_BYPASS 2
#define IOMMU_PASID_CONFIG_ABORT 3 #define IOMMU_PASID_CONFIG_ABORT 3
__u8 config; __u8 config;
__u8 padding[2]; __u8 padding[6];
union { union {
struct iommu_pasid_smmuv3 smmuv3; struct iommu_pasid_smmuv3 smmuv3;
} vendor_data; };
}; };
#endif /* _UAPI_IOMMU_H */ #endif /* _UAPI_IOMMU_H */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册