kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexandru Elisei <alexandru.elisei@arm.com>
To: kvm@vger.kernel.org
Cc: pbonzini@redhat.com, rkrcmar@redhat.com, drjones@redhat.com,
	maz@kernel.org, andre.przywara@arm.com, vladimir.murzin@arm.com,
	mark.rutland@arm.com
Subject: [kvm-unit-tests PATCH v2 14/18] lib: arm/arm64: Refuse to disable the MMU with non-identity stack pointer
Date: Thu, 28 Nov 2019 18:04:14 +0000	[thread overview]
Message-ID: <20191128180418.6938-15-alexandru.elisei@arm.com> (raw)
In-Reply-To: <20191128180418.6938-1-alexandru.elisei@arm.com>

When the MMU is off, all addresses are physical addresses. If the stack
pointer is not an identity mapped address (the virtual address is not the
same as the physical address), then we end up trying to access an invalid
memory region. This can happen if we call mmu_disable from a secondary CPU,
which has its stack allocated from the vmalloc region.

Reviewed-by: Andrew Jones <drjones@redhat.com>
Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
---
 lib/arm/mmu.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lib/arm/mmu.c b/lib/arm/mmu.c
index ed5411c157bb..773c764c4836 100644
--- a/lib/arm/mmu.c
+++ b/lib/arm/mmu.c
@@ -68,8 +68,12 @@ void mmu_enable(pgd_t *pgtable)
 extern void asm_mmu_disable(void);
 void mmu_disable(void)
 {
+	unsigned long sp = current_stack_pointer;
 	int cpu = current_thread_info()->cpu;
 
+	assert_msg(__virt_to_phys(sp) == sp,
+			"Attempting to disable MMU with non-identity mapped stack");
+
 	mmu_mark_disabled(cpu);
 
 	asm_mmu_disable();
-- 
2.20.1


  parent reply	other threads:[~2019-11-28 18:04 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-28 18:04 [kvm-unit-tests PATCH v2 00/18] arm/arm64: Various fixes Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 01/18] lib: arm/arm64: Remove unnecessary dcache maintenance operations Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 02/18] lib: arm64: Remove barriers before TLB operations Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 03/18] lib: Add WRITE_ONCE and READ_ONCE implementations in compiler.h Alexandru Elisei
2019-12-09 14:21   ` Thomas Huth
2019-12-16 10:15     ` Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 04/18] lib: arm/arm64: Use WRITE_ONCE to update the translation tables Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 05/18] lib: arm/arm64: Remove unused CPU_OFF parameter Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 06/18] arm/arm64: psci: Don't run C code without stack or vectors Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 07/18] lib: arm/arm64: Add missing include for alloc_page.h in pgtable.h Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 08/18] lib: arm: Implement flush_tlb_all Alexandru Elisei
2019-11-28 23:24   ` André Przywara
2019-12-30  8:50     ` Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 09/18] lib: arm/arm64: Teach mmu_clear_user about block mappings Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 10/18] arm/arm64: selftest: Add prefetch abort test Alexandru Elisei
2019-12-13 18:04   ` Andrew Jones
2019-12-30  9:19     ` Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 11/18] arm64: timer: Write to ICENABLER to disable timer IRQ Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 12/18] arm64: timer: EOIR the interrupt after masking the timer Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 13/18] arm64: timer: Test behavior when timer disabled or masked Alexandru Elisei
2019-12-13 18:28   ` Andrew Jones
2019-12-30  9:21     ` Alexandru Elisei
2019-11-28 18:04 ` Alexandru Elisei [this message]
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 15/18] arm/arm64: Perform dcache clean + invalidate after turning MMU off Alexandru Elisei
2019-12-13 18:42   ` Andrew Jones
2019-12-30  9:29     ` Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 16/18] arm: cstart64.S: Downgrade TLBI to non-shareable in asm_mmu_enable Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 17/18] arm/arm64: Invalidate TLB before enabling MMU Alexandru Elisei
2019-11-28 18:04 ` [kvm-unit-tests PATCH v2 18/18] arm: cstart64.S: Remove icache invalidation from asm_mmu_enable Alexandru Elisei
2019-12-13 18:51 ` [kvm-unit-tests PATCH v2 00/18] arm/arm64: Various fixes Andrew Jones

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=20191128180418.6938-15-alexandru.elisei@arm.com \
    --to=alexandru.elisei@arm.com \
    --cc=andre.przywara@arm.com \
    --cc=drjones@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=maz@kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=rkrcmar@redhat.com \
    --cc=vladimir.murzin@arm.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).