On Wed, 2021-06-23 at 11:39 +0800, Jason Wang wrote:
quoted
In the 1:1 mode, the access_ok() is all that's needed since there's no
translation.
@@ -2038,6 +2065,14 @@ static int translate_desc(struct vhost_virtqueue *vq, u64 addr, u32 len,
u64 s = 0;
int ret = 0;
+ if (vhost_has_feature(vq, VHOST_F_IDENTITY_MAPPING)) {
Using vhost_has_feature() is kind of tricky since it's used for virtio
feature negotiation.
We probably need to use backend_features instead.
I think we should probably do more:
1) forbid the feature to be set when mem table / IOTLB has at least one
mapping
2) forbid the mem table / IOTLB updating after the feature is set
Yes, that all makes sense. I confess I hadn't actually *implemented*
the feature at all; the only time I'd typed 'VHOST_F_IDENTITY_MAPPING'
was to show that snippet of "patch" as an example of what
translate_desc() would do. I just wanted *something* to put in the
'if()' statement as a placeholder, so I used that.
It could *even* have just been 'if (!umem)' but that might let it
happen by *accident* which probably isn't a good idea.