|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86/PV: assert page state in mark_pv_pt_pages_rdonly()
commit 6b1ca51b1a91d002636518afe4a8a50ba7212495
Author: Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Wed Aug 18 09:40:08 2021 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Wed Aug 18 09:40:08 2021 +0200
x86/PV: assert page state in mark_pv_pt_pages_rdonly()
About every time I look at dom0_construct_pv()'s "calculation" of
nr_pt_pages I question (myself) whether the result is precise or merely
an upper bound. I think it is meant to be precise, but I think we would
be better off having some checking in place. Hence add ASSERT()s to
verify that
- all pages have a valid L1...Ln (currently L4) page table type and
- no other bits are set, in particular the type refcount is still zero.
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/pv/dom0_build.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c
index 778c863ea4..6145d4320b 100644
--- a/xen/arch/x86/pv/dom0_build.c
+++ b/xen/arch/x86/pv/dom0_build.c
@@ -59,6 +59,16 @@ static __init void mark_pv_pt_pages_rdonly(struct domain *d,
l1e_remove_flags(*pl1e, _PAGE_RW);
page = mfn_to_page(l1e_get_mfn(*pl1e));
+ /*
+ * Verify that
+ * - all pages have a valid L1...Ln page table type and
+ * - no other bits are set, in particular the type refcount is still
+ * zero.
+ */
+ ASSERT((page->u.inuse.type_info & PGT_type_mask) >= PGT_l1_page_table);
+ ASSERT((page->u.inuse.type_info & PGT_type_mask) <=
PGT_root_page_table);
+ ASSERT(!(page->u.inuse.type_info & ~PGT_type_mask));
+
/* Read-only mapping + PGC_allocated + page-table page. */
page->count_info = PGC_allocated | 3;
page->u.inuse.type_info |= PGT_validated | 1;
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |