Skip to contentSkip to conversation

Patch "KVM: arm/arm64: Stop leaking vcpu pid references" has been added to the 4.6-stable tree

PATCH [email protected] 1 participant 1 message Jul 24, 2016

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

KVM: arm/arm64: Stop leaking vcpu pid references

to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
kvm-arm-arm64-stop-leaking-vcpu-pid-references.patch
and it can be found in the queue-4.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 591d215afcc2f94e8e2c69a63c924c044677eb31 Mon Sep 17 00:00:00 2001

From: James Morse <[email protected]>
Date: Wed, 8 Jun 2016 17:24:45 +0100
Subject: KVM: arm/arm64: Stop leaking vcpu pid references

From: James Morse <[email protected]>

commit 591d215afcc2f94e8e2c69a63c924c044677eb31 upstream.

kvm provides kvm_vcpu_uninit(), which amongst other things, releases the last reference to the struct pid of the task that was last running the vcpu.

On arm64 built with CONFIG_DEBUG_KMEMLEAK, starting a guest with kvmtool, then killing it with SIGKILL results (after some considerable time) in:

Quoted 4 lines

cat /sys/kernel/debug/kmemleak
unreferenced object 0xffff80007d5ea080 (size 128):
comm "lkvm", pid 2025, jiffies 4294942645 (age 1107.776s) hex dump (first 32 bytes):

Quoted 12 lines
   01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
   00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
 backtrace:
   [<ffff8000001b30ec>] create_object+0xfc/0x278
   [<ffff80000071da34>] kmemleak_alloc+0x34/0x70
   [<ffff80000019fa2c>] kmem_cache_alloc+0x16c/0x1d8
   [<ffff8000000d0474>] alloc_pid+0x34/0x4d0
   [<ffff8000000b5674>] copy_process.isra.6+0x79c/0x1338
   [<ffff8000000b633c>] _do_fork+0x74/0x320
   [<ffff8000000b66b0>] SyS_clone+0x18/0x20
   [<ffff800000085cb0>] el0_svc_naked+0x24/0x28
   [<ffffffffffffffff>] 0xffffffffffffffff

On x86 kvm_vcpu_uninit() is called on the path from kvm_arch_destroy_vm(), on arm no equivalent call is made. Add the call to kvm_arch_vcpu_free().

Fixes 749cf76c5a36 ("KVM: ARM: Initial skeleton to compile KVM support")
---
 arch/arm/kvm/arm.c |    1 +
 1 file changed, 1 insertion(+)
arch/arm/kvm/arm.c +1 -0
@@ -267,6 +267,7 @@ void kvm_arch_vcpu_free(struct kvm_vcpu
 	kvm_timer_vcpu_terminate(vcpu);
 	kvm_vgic_vcpu_destroy(vcpu);
 	kvm_pmu_vcpu_destroy(vcpu);
+	kvm_vcpu_uninit(vcpu);
 	kmem_cache_free(kvm_vcpu_cache, vcpu);
 }
 

Patches currently in stable-queue which might be from [email protected] are

queue-4.6/arm64-kernel-save-and-restore-uao-and-addr_limit-on-exception-entry.patch queue-4.6/kvm-arm-arm64-stop-leaking-vcpu-pid-references.patch queue-4.6/arm64-fix-dump_instr-when-pan-and-uao-are-in-use.patch