linux_dsm_epyc7002/arch/arm
Suzuki K Poulose 293f293637 kvm-arm: Unmap shadow pagetables properly
On arm/arm64, we depend on the kvm_unmap_hva* callbacks (via
mmu_notifiers::invalidate_*) to unmap the stage2 pagetables when
the userspace buffer gets unmapped. However, when the Hypervisor
process exits without explicit unmap of the guest buffers, the only
notifier we get is kvm_arch_flush_shadow_all() (via mmu_notifier::release
) which does nothing on arm. Later this causes us to access pages that
were already released [via exit_mmap() -> unmap_vmas()] when we actually
get to unmap the stage2 pagetable [via kvm_arch_destroy_vm() ->
kvm_free_stage2_pgd()]. This triggers crashes with CONFIG_DEBUG_PAGEALLOC,
which unmaps any free'd pages from the linear map.

 [  757.644120] Unable to handle kernel paging request at virtual address
  ffff800661e00000
 [  757.652046] pgd = ffff20000b1a2000
 [  757.655471] [ffff800661e00000] *pgd=00000047fffe3003, *pud=00000047fcd8c003,
  *pmd=00000047fcc7c003, *pte=00e8004661e00712
 [  757.666492] Internal error: Oops: 96000147 [#3] PREEMPT SMP
 [  757.672041] Modules linked in:
 [  757.675100] CPU: 7 PID: 3630 Comm: qemu-system-aar Tainted: G      D
 4.8.0-rc1 #3
 [  757.683240] Hardware name: AppliedMicro X-Gene Mustang Board/X-Gene Mustang Board,
  BIOS 3.06.15 Aug 19 2016
 [  757.692938] task: ffff80069cdd3580 task.stack: ffff8006adb7c000
 [  757.698840] PC is at __flush_dcache_area+0x1c/0x40
 [  757.703613] LR is at kvm_flush_dcache_pmd+0x60/0x70
 [  757.708469] pc : [<ffff20000809dbdc>] lr : [<ffff2000080b4a70>] pstate: 20000145
 ...
 [  758.357249] [<ffff20000809dbdc>] __flush_dcache_area+0x1c/0x40
 [  758.363059] [<ffff2000080b6748>] unmap_stage2_range+0x458/0x5f0
 [  758.368954] [<ffff2000080b708c>] kvm_free_stage2_pgd+0x34/0x60
 [  758.374761] [<ffff2000080b2280>] kvm_arch_destroy_vm+0x20/0x68
 [  758.380570] [<ffff2000080aa330>] kvm_put_kvm+0x210/0x358
 [  758.385860] [<ffff2000080aa524>] kvm_vm_release+0x2c/0x40
 [  758.391239] [<ffff2000082ad234>] __fput+0x114/0x2e8
 [  758.396096] [<ffff2000082ad46c>] ____fput+0xc/0x18
 [  758.400869] [<ffff200008104658>] task_work_run+0x108/0x138
 [  758.406332] [<ffff2000080dc8ec>] do_exit+0x48c/0x10e8
 [  758.411363] [<ffff2000080dd5fc>] do_group_exit+0x6c/0x130
 [  758.416739] [<ffff2000080ed924>] get_signal+0x284/0xa18
 [  758.421943] [<ffff20000808a098>] do_signal+0x158/0x860
 [  758.427060] [<ffff20000808aad4>] do_notify_resume+0x6c/0x88
 [  758.432608] [<ffff200008083624>] work_pending+0x10/0x14
 [  758.437812] Code: 9ac32042 8b010001 d1000443 8a230000 (d50b7e20)

This patch fixes the issue by moving the kvm_free_stage2_pgd() to
kvm_arch_flush_shadow_all().

Cc: <stable@vger.kernel.org> # 3.9+
Tested-by: Itaru Kitayama <itaru.kitayama@riken.jp>
Reported-by: Itaru Kitayama <itaru.kitayama@riken.jp>
Reported-by: James Morse <james.morse@arm.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
2016-09-09 12:40:30 +02:00
..
boot revert "ARM: keystone: dts: add psci command definition" 2016-08-10 16:40:56 -07:00
common dma-mapping: use unsigned long for dma_attrs 2016-08-04 08:50:07 -04:00
configs Revert "ARM: aspeed: adapt defconfigs for new CONFIG_PRINTK_TIME" 2016-08-03 11:07:57 +02:00
crypto
firmware
include Implements HARDENED_USERCOPY verification of copy_to_user/copy_from_user 2016-08-08 14:48:14 -07:00
kernel Merge branch 'fixes' of git://git.armlinux.org.uk/~rmk/linux-arm 2016-08-18 11:13:20 -07:00
kvm kvm-arm: Unmap shadow pagetables properly 2016-09-09 12:40:30 +02:00
lib
mach-alpine
mach-artpec
mach-asm9260
mach-aspeed
mach-at91 ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
mach-axxia
mach-bcm ARM: DT updates for v4.8 2016-08-01 18:37:45 -04:00
mach-berlin
mach-clps711x ARM: do away with final ARCH_REQUIRE_GPIOLIB 2016-08-02 12:31:58 -07:00
mach-cns3xxx
mach-davinci ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
mach-digicolor
mach-dove
mach-ebsa110
mach-efm32
mach-ep93xx
mach-exynos ARM: SoC driver updates for v4.8 2016-08-01 18:36:01 -04:00
mach-footbridge
mach-gemini
mach-highbank
mach-hisi
mach-imx ARM: imx6: mark GPC node as not populated after irq init to probe pm domain driver 2016-08-09 12:36:28 -05:00
mach-integrator treewide: replace obsolete _refok by __ref 2016-08-02 17:31:41 -04:00
mach-iop13xx
mach-iop32x
mach-iop33x
mach-ixp4xx
mach-keystone ARM: SoC defconfig updates for v4.8 2016-08-01 18:30:44 -04:00
mach-ks8695
mach-lpc18xx
mach-lpc32xx
mach-mediatek
mach-meson
mach-mmp
mach-moxart ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-mv78xx0 treewide: replace obsolete _refok by __ref 2016-08-02 17:31:41 -04:00
mach-mvebu ARM: don't include removed directories 2016-08-10 22:42:18 +02:00
mach-mxs ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-netx
mach-nomadik
mach-nspire DeviceTree update for 4.8: 2016-07-30 11:32:01 -07:00
mach-omap1 ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
mach-omap2 Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2016-08-03 07:26:11 -04:00
mach-orion5x RTC for 4.8 2016-08-05 09:48:22 -04:00
mach-oxnas ARM: oxnas: select reset controller framework 2016-08-10 22:42:32 +02:00
mach-picoxcell ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-prima2 ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-pxa ARM: SoC fixes 2016-08-11 14:14:23 -07:00
mach-qcom
mach-realview ARM: don't include removed directories 2016-08-10 22:42:18 +02:00
mach-rockchip ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-rpc
mach-s3c24xx ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-s3c64xx ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
mach-s5pv210 ARM: don't include removed directories 2016-08-10 22:42:18 +02:00
mach-sa1100
mach-shmobile ARM: shmobile: don't call platform_can_secondary_boot on UP 2016-08-02 12:34:49 -07:00
mach-socfpga
mach-spear ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-sti Highlights: 2016-07-14 15:08:15 +02:00
mach-stm32
mach-sunxi
mach-tango
mach-tegra ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-u300 ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-uniphier
mach-ux500 ARM: SoC driver updates for v4.8 2016-08-01 18:36:01 -04:00
mach-versatile
mach-vexpress ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-vt8500 ARM: SoC cleanups for v4.8 2016-08-01 18:21:13 -04:00
mach-w90x900
mach-zx
mach-zynq
mm ARM: 8591/1: mm: use fully constructed struct pages for EFI pgd allocations 2016-08-09 22:57:41 +01:00
net
nwfpe
oprofile
plat-iop ARM: iop: Fix indentation 2016-07-07 18:06:40 +02:00
plat-omap
plat-orion
plat-pxa
plat-samsung ARM: SoC platform updates for v4.8 2016-08-01 18:27:08 -04:00
plat-versatile
probes
tools
vdso
vfp arm: Convert VFP hotplug notifiers to state machine 2016-07-15 10:40:22 +02:00
xen xen: change the type of xen_vcpu_id to uint32_t 2016-08-24 18:17:27 +01:00
Kconfig Implements HARDENED_USERCOPY verification of copy_to_user/copy_from_user 2016-08-08 14:48:14 -07:00
Kconfig-nommu
Kconfig.debug
Makefile ARM: hide mach-*/ include for ARM_SINGLE_ARMV7M 2016-08-10 22:42:26 +02:00