On Mon, Oct 21, 2024 at 07:11:47PM +1100, Alexey Kardashevskiy wrote:
- hwpt_paging = iommufd_get_hwpt_paging(ucmd, cmd->hwpt_id);
- if (IS_ERR(hwpt_paging)) {
rc = PTR_ERR(hwpt_paging);
iommufd_get_hwpt_paging() is container_of() which does not test for the value and just does a simple math so the actual error value from iommufd_get_object() is ... lost?
Oh well, not really lost, as "obj" and "common.obj" seem to be forced to be at the beginning of iommufd object structs so container_of() is no-op or is not it?
Yes, it is just a type check, the revised code I suggested doesn't rely on this. Jonathon remarked on the same for fwctl and we came up with something different.
If something needs to be guaranteed to stay alive, may be just call device_get(viommu->dev), with the comment above? Or it is some different refcounting which is missing? Thanks,
device_get is different, it just makes sure the struct device memory is around, it doesn't prevent iommu unplug
Jason