All of lore.kernel.org
 help / color / mirror / Atom feed
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;
 }
 

  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.