Thread (13 messages) flat view 13 messages, 4 authors, 2016-08-18

Re: [PATCH BACKPORT 3.17-4.4 2/4] MIPS: KVM: Add missing gfn range check

From: James Hogan <hidden>
Date: 2016-08-18 12:31:35
Also in: kvm, stable

Hi Sasha,

On Thu, Aug 18, 2016 at 07:45:33AM -0400, Levin, Alexander wrote:
On 08/18/2016 05:05 AM, James Hogan wrote:
quoted
commit 8985d50382359e5bf118fdbefc859d0dbf6cebc7 upstream.

kvm_mips_handle_mapped_seg_tlb_fault() calculates the guest frame number
based on the guest TLB EntryLo values, however it is not range checked
to ensure it lies within the guest_pmap. If the physical memory the
guest refers to is out of range then dump the guest TLB and emit an
internal error.

Fixes: 858dd5d45733 ("KVM/MIPS32: MMU/TLB operations for the Guest.")
Signed-off-by: James Hogan <redacted>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Radim Krčmář" <redacted>
Cc: Ralf Baechle <redacted>
Cc: linux-mips@linux-mips.org
Cc: kvm@vger.kernel.org
Signed-off-by: Radim Krčmář <redacted>
[james.hogan@imgtec.com: Backport to v3.17.y - v4.4.y]
Signed-off-by: James Hogan <redacted>
Hey James,

Thanks for the backport!

Applying this one seems to fail with:

$ git apply --reject [PATCH BACKPORT 3.17-4.4 1_4] MIPS: KVM: Fix mapped
fault broken commpage handling - James Hogan [off-list ref] -
2016-08-18 0505.eml
Checking patch arch/mips/kvm/tlb.c...
error: while searching for:
	unsigned long entryhi = 0, entrylo0 = 0, entrylo1 = 0;
	struct kvm *kvm = vcpu->kvm;
	pfn_t pfn0, pfn1;
	long tlb_lo[2];

	tlb_lo[0] = tlb->tlb_lo0;

error: patch failed: arch/mips/kvm/tlb.c:361
error: while searching for:
			VPN2_MASK & (PAGE_MASK << 1)))
		tlb_lo[(KVM_GUEST_COMMPAGE_ADDR >> PAGE_SHIFT) & 1] = 0;

	if (kvm_mips_map_page(kvm, mips3_tlbpfn_to_paddr(tlb_lo[0])
				   >> PAGE_SHIFT) < 0)
		return -1;

	if (kvm_mips_map_page(kvm, mips3_tlbpfn_to_paddr(tlb_lo[1])
				   >> PAGE_SHIFT) < 0)
		return -1;

	pfn0 = kvm->arch.guest_pmap[mips3_tlbpfn_to_paddr(tlb_lo[0])
				    >> PAGE_SHIFT];
	pfn1 = kvm->arch.guest_pmap[mips3_tlbpfn_to_paddr(tlb_lo[1])
				    >> PAGE_SHIFT];

	if (hpa0)
		*hpa0 = pfn0 << PAGE_SHIFT;

error: patch failed: arch/mips/kvm/tlb.c:374
Applying patch arch/mips/kvm/tlb.c with 2 rejects...
Rejected hunk #1.
Rejected hunk #2.
This works for me (on 558ba5fd7d8d Linux 4.1.30) as long as 1/4 is
applied first. Are you applying them in the right order?

Cheers
James

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help