Messages in this thread | | | Subject | Re: [PATCH Part2 RFC v4 07/40] x86/sev: Split the physmap when adding the page in RMP table | From | Brijesh Singh <> | Date | Thu, 15 Jul 2021 14:38:31 -0500 |
| |
On 7/15/21 1:39 PM, Sean Christopherson wrote: > On Thu, Jul 15, 2021, Brijesh Singh wrote: >> The memfd_secrets uses the set_direct_map_{invalid,default}_noflush() and it >> is designed to remove/add the present bit in the direct map. We can't use >> them, because in our case the page may get accessed by the KVM (e.g >> kvm_guest_write, kvm_guest_map etc). > > But KVM should never access a guest private page, i.e. the direct map should > always be restored to PRESENT before KVM attempts to access the page. >
Yes, KVM should *never* access the guest private pages. So, we could potentially enhance the RMPUPDATE() to check for the assigned and act accordingly.
Are you thinking something along the line of this:
int rmpupdate(struct page *page, struct rmpupdate *val) { ... /* * If page is getting assigned in the RMP entry then unmap * it from the direct map before its added in the RMP table. */ if (val.assigned) set_direct_map_invalid_noflush(page_to_virt(page), 1);
...
/* * If the page is getting unassigned then restore the mapping * in the direct map after its removed from the RMP table. */ if (!val.assigned) set_direct_map_default_noflush(page_to_virt(page), 1); ... }
thanks
| |