|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 3/3] [GSOC14] FIX:- Race condition between initializing shared ring and mempaging.
On Mon, 2014-06-16 at 23:50 +0530, Dushyant Behl wrote:
> This patch is part of the work done under the gsoc project -
> Lazy Restore Using Memory Paging.
>
> This patch is meant to fix a known race condition bug in mempaging
> ring setup routines. The race conditon was between initializing
"condition"
> mem paging and initializing shared ring, earlier the code initialized
> mem paging before removing the ring page from guest's physical map
> which could enable the guest to interfere with the ring initialisation.
> Now the code removes the page from the guest's physical map before
> enabling mempaging so that the guest cannot clobber the ring after
> we initialise it.
>
> Signed-off-by: Dushyant Behl <myselfdushyantbehl@xxxxxxxxx>
> Reviewed-by: Andres Lagar-Cavilla <andres@xxxxxxxxxxxxxxxx>
> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> tools/libxc/xc_mem_paging_setup.c | 24 ++++++++++++++++++++----
> 1 file changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/tools/libxc/xc_mem_paging_setup.c
> b/tools/libxc/xc_mem_paging_setup.c
> index 679c606..a4c4798 100644
> --- a/tools/libxc/xc_mem_paging_setup.c
> +++ b/tools/libxc/xc_mem_paging_setup.c
> @@ -73,6 +73,24 @@ int xc_mem_paging_ring_setup(xc_interface *xch,
> }
> }
>
> + /*
> + * Remove the page from guest's physical map so that the guest will not
> + * be able to break security by pretending to be toolstack for a while.
> + */
> + if ( xc_domain_decrease_reservation_exact(xch, domain_id, 1, 0,
> ring_page) )
ring_page here is a void * mapping of the page, isn't it? Not a
xen_pfn_t[] array of pfns, so surely this isn't right.
> @@ -106,14 +124,12 @@ int xc_mem_paging_ring_setup(xc_interface *xch,
> }
> *port = rc;
>
> - /* Initialise ring */
> - SHARED_RING_INIT((mem_event_sring_t *)ring_page);
> - BACK_RING_INIT(back_ring, (mem_event_sring_t *)ring_page, PAGE_SIZE);
> + DPRINTF("enabled mempaging");
>
> /* Now that the ring is set, remove it from the guest's physmap */
> if ( xc_domain_decrease_reservation_exact(xch, domain_id, 1, 0,
> &ring_pfn) )
This looks like the correct invocation to me. If you correct the one
above though isn't this one then redundant though?
> {
> - PERROR("Failed to remove ring from guest physmap");
> + PERROR("Failed to remove ring_pfn from guest physmap");
> return -1;
> }
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |