From: Rusty Russell <rusty@rustcorp.com.au>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Ingo Molnar <mingo@elte.hu>, linux-kernel@vger.kernel.org
Subject: [PATCH] x86: fix pte_flags() to only return flags, fix lguest (updated)
Date: Tue, 22 Jul 2008 15:40:46 +1000 [thread overview]
Message-ID: <200807221540.47161.rusty@rustcorp.com.au> (raw)
In-Reply-To: <488566EA.5040805@goop.org>
(Jeremy said:
rusty: use PTE_MASK
rusty: use PTE_MASK
rusty: use PTE_MASK
When I asked:
jsgf: does that include the NX flag?
He responded eloquently:
rusty: use PTE_MASK
rusty: use PTE_MASK
yes, it's the official constant of masking flags out of ptes
)
Change a15af1c9ea2750a9ff01e51615c45950bad8221b 'x86/paravirt: add
pte_flags to just get pte flags' removed lguest's private pte_flags()
in favor of a generic one.
Unfortunately, the generic one doesn't filter out the non-flags bits:
this results in lguest creating corrupt shadow page tables and blowing
up host memory.
Since noone is supposed to use the pfn part of pte_flags(), it seems
safest to always do the filtering.
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
diff -r ee1a6adad3d2 arch/x86/kernel/paravirt.c
--- a/arch/x86/kernel/paravirt.c Mon Jul 21 12:49:25 2008 +1000
+++ b/arch/x86/kernel/paravirt.c Tue Jul 22 15:31:04 2008 +1000
@@ -428,7 +428,7 @@ struct pv_mmu_ops pv_mmu_ops = {
#endif /* PAGETABLE_LEVELS >= 3 */
.pte_val = native_pte_val,
- .pte_flags = native_pte_val,
+ .pte_flags = native_pte_flags,
.pgd_val = native_pgd_val,
.make_pte = native_make_pte,
diff -r ee1a6adad3d2 include/asm-x86/page.h
--- a/include/asm-x86/page.h Mon Jul 21 12:49:25 2008 +1000
+++ b/include/asm-x86/page.h Tue Jul 22 15:31:04 2008 +1000
@@ -144,6 +144,11 @@ static inline pteval_t native_pte_val(pt
return pte.pte;
}
+static inline pteval_t native_pte_flags(pte_t pte)
+{
+ return native_pte_val(pte) & ~PTE_MASK;
+}
+
#define pgprot_val(x) ((x).pgprot)
#define __pgprot(x) ((pgprot_t) { (x) } )
@@ -165,7 +170,7 @@ static inline pteval_t native_pte_val(pt
#endif
#define pte_val(x) native_pte_val(x)
-#define pte_flags(x) native_pte_val(x)
+#define pte_flags(x) native_pte_flags(x)
#define __pte(x) native_make_pte(x)
#endif /* CONFIG_PARAVIRT */
diff -r ee1a6adad3d2 include/asm-x86/paravirt.h
--- a/include/asm-x86/paravirt.h Mon Jul 21 12:49:25 2008 +1000
+++ b/include/asm-x86/paravirt.h Tue Jul 22 15:31:04 2008 +1000
@@ -1083,6 +1083,9 @@ static inline pteval_t pte_flags(pte_t p
ret = PVOP_CALL1(pteval_t, pv_mmu_ops.pte_flags,
pte.pte);
+#ifdef CONFIG_PARAVIRT_DEBUG
+ BUG_ON(ret & PTE_MASK);
+#endif
return ret;
}
next prev parent reply other threads:[~2008-07-22 5:49 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-22 4:31 [PATCH] x86: fix pte_flags() to only return flags, fix lguest Rusty Russell
2008-07-22 4:38 ` Stephen Rothwell
2008-07-22 4:51 ` Jeremy Fitzhardinge
2008-07-22 4:52 ` Rusty Russell
2008-07-22 4:49 ` Jeremy Fitzhardinge
2008-07-22 5:40 ` Rusty Russell [this message]
2008-07-22 5:59 ` [PATCH 1/2] x86: rename PTE_MASK to PTE_PFN_MASK Jeremy Fitzhardinge
2008-07-22 8:36 ` Ingo Molnar
2008-07-22 10:58 ` Rusty Russell
2008-07-22 11:55 ` Ingo Molnar
2008-07-22 13:03 ` Johannes Weiner
2008-07-22 14:52 ` Jeremy Fitzhardinge
2008-07-22 15:18 ` Johannes Weiner
2008-07-22 15:23 ` Johannes Weiner
2008-07-22 15:33 ` Ingo Molnar
2008-07-22 15:43 ` Johannes Weiner
2008-07-22 5:59 ` [PATCH 2/2] x86: add PTE_FLAGS_MASK Jeremy Fitzhardinge
2008-07-22 9:04 ` [PATCH] x86: fix pte_flags() to only return flags, fix lguest (updated) Ingo Molnar
2008-07-23 0:59 ` Rusty Russell
2008-07-24 11:31 ` Ingo Molnar
2008-07-25 1:55 ` Rusty Russell
2008-07-28 15:11 ` Ingo Molnar
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=200807221540.47161.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/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.