[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH v10 8/9] xen: retrieve reserved pages on populate_physmap
Hi Jan > -----Original Message----- > From: Jan Beulich <jbeulich@xxxxxxxx> > Sent: Tuesday, September 6, 2022 2:34 PM > To: Penny Zheng <Penny.Zheng@xxxxxxx> > Cc: Wei Chen <Wei.Chen@xxxxxxx>; Andrew Cooper > <andrew.cooper3@xxxxxxxxxx>; George Dunlap <george.dunlap@xxxxxxxxxx>; > Julien Grall <julien@xxxxxxx>; Stefano Stabellini <sstabellini@xxxxxxxxxx>; > Wei Liu <wl@xxxxxxx>; xen-devel@xxxxxxxxxxxxxxxxxxxx > Subject: Re: [PATCH v10 8/9] xen: retrieve reserved pages on > populate_physmap > > On 05.09.2022 09:08, Penny Zheng wrote: > > Hi jan > > > >> -----Original Message----- > >> From: Jan Beulich <jbeulich@xxxxxxxx> > >> Sent: Wednesday, August 17, 2022 6:05 PM > >> To: Penny Zheng <Penny.Zheng@xxxxxxx> > >> Cc: Wei Chen <Wei.Chen@xxxxxxx>; Andrew Cooper > >> <andrew.cooper3@xxxxxxxxxx>; George Dunlap > >> <george.dunlap@xxxxxxxxxx>; Julien Grall <julien@xxxxxxx>; Stefano > >> Stabellini <sstabellini@xxxxxxxxxx>; Wei Liu <wl@xxxxxxx>; > >> xen-devel@xxxxxxxxxxxxxxxxxxxx > >> Subject: Re: [PATCH v10 8/9] xen: retrieve reserved pages on > >> populate_physmap > >> > >> On 16.08.2022 04:36, Penny Zheng wrote: > >>> @@ -2867,6 +2854,61 @@ int __init acquire_domstatic_pages(struct > >>> domain *d, mfn_t smfn, > >>> > >>> return 0; > >>> } > >>> + > >>> +/* > >>> + * Acquire nr_mfns contiguous pages, starting at #smfn, of static > >>> +memory, > >>> + * then assign them to one specific domain #d. > >>> + */ > >>> +int __init acquire_domstatic_pages(struct domain *d, mfn_t smfn, > >>> + unsigned int nr_mfns, unsigned > >>> +int > >>> +memflags) { > >>> + struct page_info *pg; > >>> + > >>> + ASSERT_ALLOC_CONTEXT(); > >>> + > >>> + pg = acquire_staticmem_pages(smfn, nr_mfns, memflags); > >>> + if ( !pg ) > >>> + return -ENOENT; > >>> + > >>> + if ( assign_domstatic_pages(d, pg, nr_mfns, memflags) ) > >>> + return -EINVAL; > >>> + > >>> + return 0; > >>> +} > >>> + > >>> +/* > >>> + * Acquire a page from reserved page list(resv_page_list), when > >>> +populating > >>> + * memory for static domain on runtime. > >>> + */ > >>> +mfn_t acquire_reserved_page(struct domain *d, unsigned int > >>> +memflags) { > >>> + struct page_info *page; > >>> + > >>> + ASSERT_ALLOC_CONTEXT(); > >>> + > >>> + /* Acquire a page from reserved page list(resv_page_list). */ > >>> + spin_lock(&d->page_alloc_lock); > >>> + page = page_list_remove_head(&d->resv_page_list); > >>> + spin_unlock(&d->page_alloc_lock); > >>> + if ( unlikely(!page) ) > >>> + return INVALID_MFN; > >>> + > >>> + if ( !prepare_staticmem_pages(page, 1, memflags) ) > >>> + goto fail; > >>> + > >>> + if ( assign_domstatic_pages(d, page, 1, memflags) ) > >>> + goto fail_assign; > >>> + > >>> + return page_to_mfn(page); > >>> + > >>> + fail_assign: > >>> + free_staticmem_pages(page, 1, memflags & MEMF_no_scrub); > >> > >> Doesn't this need to be !(memflags & MEMF_no_scrub)? And then - with > > > > I got a bit confused about this flag MEMF_no_scrub, does it mean no > > need to scrub? > > Yes, as its name says. > > > Since I saw that in alloc_domheap_pages(...) > > if ( assign_page(pg, order, d, memflags) ) > > { > > free_heap_pages(pg, order, memflags & MEMF_no_scrub); > > return NULL; > > } > > It doesn't contain exclamation mark too... > > Hmm, you're right - on these error paths the scrubbing is needed if the page > wasn't previously scrubbed, as part of the set of pages may have been > transiently exposed to the guest (and by guessing it may have been able to > actually access the pages; I'm inclined to say it's its own fault though if > that > way information is being leaked). > Then, the same for the acquire_domstatic_pages(...) if ( assign_pages(pg, nr_mfns, d, memflags) ) { free_staticmem_pages(pg, nr_mfns, memflags & MEMF_no_scrub); return -EINVAL; } On this error path, it has misused the MEMF_no_scrub too. But IMO, as we are talking about these pages will always be reserved to the guest, maybe here it also doesn't need scrubbing at all? > But ... > > >> assignment having failed and with it being just a single page we're > >> talking about, the page was not exposed to the guest at any point > >> afaict. So I don't see the need for scrubbing in the first place. > > while my comment wasn't really correct, as said - you don't need any > scrubbing here at all, I think. > > Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |