From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: "H. Peter Anvin" <hpa@zytor.com>, tglx@linutronix.de, mingo@redhat.com
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
linux@eikelenboom.it, xen-devel@lists.xen.org
Subject: Re: [PATCH] x86/mm: Skip the hypervisor range when walking PGD
Date: Thu, 5 Nov 2015 22:38:20 -0500 [thread overview]
Message-ID: <563C20AC.5020308@oracle.com> (raw)
In-Reply-To: <563BD8D6.107@zytor.com>
On 11/05/2015 05:31 PM, H. Peter Anvin wrote:
> On 11/05/15 10:56, Boris Ostrovsky wrote:
>> The range between 0xffff800000000000 and 0xffff87ffffffffff is reserved
>> for hypervisor and therefore we should not try to follow PGD's indexes
>> corresponding to those addresses.
>>
>> While this has alsways been a problem, with commit e1a58320a38d ("x86/mm:
>> Warn on W^X mappings") ptdump_walk_pgd_level_core() can now be called
>> during boot, causing a PV Xen guest to crash.
>>
>> Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
>> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
>> ---
>> arch/x86/mm/dump_pagetables.c | 7 ++++++-
>> 1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/arch/x86/mm/dump_pagetables.c b/arch/x86/mm/dump_pagetables.c
>> index 1bf417e..756c921 100644
>> --- a/arch/x86/mm/dump_pagetables.c
>> +++ b/arch/x86/mm/dump_pagetables.c
>> @@ -362,8 +362,13 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd,
>> bool checkwx)
>> {
>> #ifdef CONFIG_X86_64
>> +/* ffff800000000000 - ffff87ffffffffff is reserved for hypervisor */
>> +#define is_hypervisor_range(idx) (paravirt_enabled() && \
>> + (((idx) >= pgd_index(__PAGE_OFFSET) - 16) && \
>> + ((idx) < pgd_index(__PAGE_OFFSET))))
>> pgd_t *start = (pgd_t *) &init_level4_pgt;
>> #else
>> +#define is_hypervisor_range(idx) 0
>> pgd_t *start = swapper_pg_dir;
>> #endif
>> pgprotval_t prot;
>> @@ -381,7 +386,7 @@ static void ptdump_walk_pgd_level_core(struct seq_file *m, pgd_t *pgd,
>>
>> for (i = 0; i < PTRS_PER_PGD; i++) {
>> st.current_address = normalize_addr(i * PGD_LEVEL_MULT);
>> - if (!pgd_none(*start)) {
>> + if (!pgd_none(*start) && !is_hypervisor_range(i)) {
>> if (pgd_large(*start) || !pgd_present(*start)) {
>> prot = pgd_flags(*start);
>> note_page(m, &st, __pgprot(prot), 1);
>>
> Maybe we could use the max_lines field in the address_markers[] array?
> We really shouldn't be mapping anything in the hypervisor space even on
> native.
You mean overload max_lines with a value indicating that the range needs
to be skipped?
That would require checking the range on each loop iteration since we
update st.marker *after* we've walked a particular index. (And I think
it would need to be done on each level to be generic).
I could just drop paravirt_enabled() in is_hypervisor_range() but you
are thinking about avoiding the macro altogether, right?
(I do need to add hypervisor range to address_markers[])
-boris
next prev parent reply other threads:[~2015-11-06 3:39 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-05 18:56 [PATCH] x86/mm: Skip the hypervisor range when walking PGD Boris Ostrovsky
2015-11-05 22:31 ` H. Peter Anvin
2015-11-06 3:38 ` Boris Ostrovsky [this message]
2015-11-06 3:38 ` Boris Ostrovsky
2015-11-05 22:31 ` H. Peter Anvin
2015-11-07 9:43 ` [tip:x86/urgent] " tip-bot for Boris Ostrovsky
-- strict thread matches above, loose matches on Subject: below --
2015-11-05 18:56 [PATCH] " Boris Ostrovsky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=563C20AC.5020308@oracle.com \
--to=boris.ostrovsky@oracle.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@eikelenboom.it \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.