Re: [PATCH v5 04/13] KVM: Introduce a new guest mapping API

From: Paolo Bonzini
Date: Wed Jan 30 2019 - 12:09:07 EST


On 23/01/19 18:50, Konrad Rzeszutek Wilk wrote:
>> + if (dirty)
>> + kvm_release_pfn_dirty(map->pfn);
>> + else
>> + kvm_release_pfn_clean(map->pfn);
>> + map->hva = NULL;
> I keep on having this gnawing feeling that we MUST set map->page to
> NULL.
>
> That is I can see how it is not needed if you are using 'map' and
> 'unmap' together - for that we are good. But what I am worried is that
> some one unmaps it .. and instead of checking map->hva they end up
> checking map->page and think the page is mapped.

I think that would break anyway the memremap case.

So I think we should indeed reset map->page, but we should set it to a
poison value:

#define KVM_UNMAPPED_PAGE ((void *) 0x500 + POISON_POINTER_DELTA)

mem->page = KVM_UNMAPPED_PAGE;

This should make it clear to everyone that checking map->page is _not_
the right thing to do in any case.

Paolo

> Would you be OK adding that extra statement just as a fail-safe
> mechanism in case someones misues the APIs?