hw/xen: Map guest XENSTORE_PFN grant in emulated Xenstore

We don't actually access the guest's page through the grant, because
this isn't real Xen, and we can just use the page we gave it in the
first place. Map the grant anyway, mostly for cosmetic purposes so it
*looks* like it's in use in the guest-visible grant table.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Paul Durrant <paul@xen.org>
This commit is contained in:
David Woodhouse 2023-01-07 13:54:07 +00:00
parent 0324751272
commit d05864d23b
1 changed files with 16 additions and 0 deletions
hw/i386/kvm

View File

@ -21,6 +21,7 @@
#include "hw/sysbus.h"
#include "hw/xen/xen.h"
#include "hw/xen/xen_backend_ops.h"
#include "xen_overlay.h"
#include "xen_evtchn.h"
#include "xen_xenstore.h"
@ -34,6 +35,7 @@
#include "hw/xen/interface/io/xs_wire.h"
#include "hw/xen/interface/event_channel.h"
#include "hw/xen/interface/grant_table.h"
#define TYPE_XEN_XENSTORE "xen-xenstore"
OBJECT_DECLARE_SIMPLE_TYPE(XenXenstoreState, XEN_XENSTORE)
@ -66,6 +68,9 @@ struct XenXenstoreState {
uint8_t *impl_state;
uint32_t impl_state_size;
struct xengntdev_handle *gt;
void *granted_xs;
};
struct XenXenstoreState *xen_xenstore_singleton;
@ -1453,6 +1458,17 @@ int xen_xenstore_reset(void)
}
s->be_port = err;
/*
* We don't actually access the guest's page through the grant, because
* this isn't real Xen, and we can just use the page we gave it in the
* first place. Map the grant anyway, mostly for cosmetic purposes so
* it *looks* like it's in use in the guest-visible grant table.
*/
s->gt = qemu_xen_gnttab_open();
uint32_t xs_gntref = GNTTAB_RESERVED_XENSTORE;
s->granted_xs = qemu_xen_gnttab_map_refs(s->gt, 1, xen_domid, &xs_gntref,
PROT_READ | PROT_WRITE);
return 0;
}