On 2023/9/25 14:22, Yi Liu wrote:
On 2023/9/21 20:10, Baolu Lu wrote:
On 2023/9/21 15:51, Yi Liu wrote:
+/**
+ * iommu_copy_user_data - Copy iommu driver specific user space data
+ * @dst_data: Pointer to an iommu driver specific user data that is
defined in
+ * include/uapi/linux/iommufd.h
+ * @src_data: Pointer to a struct iommu_user_data for user space
data info
+ * @data_len: Length of current user data structure, i.e.
sizeof(struct _dst)
+ * @min_len: Initial length of user data structure for backward
compatibility.
+ * This should be offsetofend using the last member in the
user data
+ * struct that was initially added to
include/uapi/linux/iommufd.h
+ */
+static inline int iommu_copy_user_data(void *dst_data,
+ const struct iommu_user_data *src_data,
+ size_t data_len, size_t min_len)
+{
+ if (WARN_ON(!dst_data || !src_data))
+ return -EINVAL;
+ if (src_data->len < min_len || data_len < src_data->len)
+ return -EINVAL;
+ return copy_struct_from_user(dst_data, data_len,
+ src_data->uptr, src_data->len);
+}
I am not sure that I understand the purpose of "min_len" correctly. It
seems like it would always be equal to data_len?
no, it will not be equal to data_len once there is extension in the
uAPI structure.
Or, it means the minimal data length that the iommu driver requires?
it is the minimal data length the uAPI requires. min_len is finalized
per the upstream of the first version of the uAPI.
So, it looks like a constant. Perhaps we should document it in the
uapi/iommuf.h and avoid using it as a parameter of a helper function?
Best regards,
baolu