Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4623c28e authored by Rusty Russell's avatar Rusty Russell
Browse files

lguest: fix BUG_ON() in invalid guest page table.



If we discover the entry is invalid, we kill the guest, but we must
avoid calling gpte_addr() on the invalid pmd, otherwise:

	kernel BUG at drivers/lguest/page_tables.c:157!

Signed-off-by: default avatarRusty Russell <rusty@rustcorp.com.au>
parent 3b868a40
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -669,8 +669,10 @@ unsigned long guest_pa(struct lg_cpu *cpu, unsigned long vaddr)


#ifdef CONFIG_X86_PAE
#ifdef CONFIG_X86_PAE
	gpmd = lgread(cpu, gpmd_addr(gpgd, vaddr), pmd_t);
	gpmd = lgread(cpu, gpmd_addr(gpgd, vaddr), pmd_t);
	if (!(pmd_flags(gpmd) & _PAGE_PRESENT))
	if (!(pmd_flags(gpmd) & _PAGE_PRESENT)) {
		kill_guest(cpu, "Bad address %#lx", vaddr);
		kill_guest(cpu, "Bad address %#lx", vaddr);
		return -1UL;
	}
	gpte = lgread(cpu, gpte_addr(cpu, gpmd, vaddr), pte_t);
	gpte = lgread(cpu, gpte_addr(cpu, gpmd, vaddr), pte_t);
#else
#else
	gpte = lgread(cpu, gpte_addr(cpu, gpgd, vaddr), pte_t);
	gpte = lgread(cpu, gpte_addr(cpu, gpgd, vaddr), pte_t);