|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v10 8/9] xen: retrieve reserved pages on populate_physmap
On 06.09.2022 09:14, Penny Zheng wrote:
> 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.
Why do you say "misused"?
> 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?
Perhaps. It feels as if we had been there before, quite some time ago.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |