From: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
To: Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>
Cc: kvm-devel <kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org>
Subject: Re: [patch] kvm: make cr3 loading more robust
Date: Wed, 03 Jan 2007 10:29:16 +0200 [thread overview]
Message-ID: <459B695C.5090004@qumranet.com> (raw)
In-Reply-To: <20070103021057.GA11316-X9Un+BFzKDI@public.gmane.org>
Ingo Molnar wrote:
> From: Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>
> Subject: [patch] kvm: make cr3 loading more robust
>
> rmap_write_protect() has a BUG_ON() if a physical address is not found
> the the memslot. But this is a possible scenario if a buggy guest OS
> loads an invalid or corrupted cr3 value. So exit more gracefully.
>
>
I think a better solution is to detect the invalid cr3 in new_cr3().
That way the entire chain of error returns is avoided.
> [ Avi: this patch needs kvm_mmu_get_page() NULL return to not be ignored
> by mmu_alloc_roots()/nonpaging_init_context()/paging_new_cr3()/etc.
> and passed further down - i assume you are working on those
> issues already, or should i fix those too? ]
>
kvm_mmu_get_page() cannot return NULL (before this patch), as we ensure
there are free pages before entry to page_fault.
> Signed-off-by: Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org>
>
> Index: linux/drivers/kvm/mmu.c
> ===================================================================
> --- linux.orig/drivers/kvm/mmu.c
> +++ linux/drivers/kvm/mmu.c
> @@ -378,7 +378,7 @@ static void rmap_remove(struct kvm_vcpu
> }
> }
>
> -static void rmap_write_protect(struct kvm_vcpu *vcpu, u64 gfn)
> +static int rmap_write_protect(struct kvm_vcpu *vcpu, u64 gfn)
> {
> struct kvm *kvm = vcpu->kvm;
> struct page *page;
> @@ -387,7 +387,8 @@ static void rmap_write_protect(struct kv
> u64 *spte;
>
> slot = gfn_to_memslot(kvm, gfn);
> - BUG_ON(!slot);
> + if (!slot)
> + return -1;
> page = gfn_to_page(slot, gfn);
>
> while (page->private) {
> @@ -407,6 +408,7 @@ static void rmap_write_protect(struct kv
> kvm_arch_ops->tlb_flush(vcpu);
> *spte &= ~(u64)PT_WRITABLE_MASK;
> }
> + return 0;
> }
>
> static int is_empty_shadow_page(hpa_t page_hpa)
> @@ -592,12 +594,17 @@ static struct kvm_mmu_page *kvm_mmu_get_
> page = kvm_mmu_alloc_page(vcpu, parent_pte);
> if (!page)
> return page;
> + if (!metaphysical) {
> + if (rmap_write_protect(vcpu, gfn) < 0) {
> + kvm_mmu_free_page(vcpu, page->page_hpa);
> + return NULL;
> + }
> + }
> pgprintk("%s: adding gfn %lx role %x\n", __FUNCTION__, gfn, role.word);
> page->gfn = gfn;
> page->role = role;
> hlist_add_head(&page->hash_link, bucket);
> - if (!metaphysical)
> - rmap_write_protect(vcpu, gfn);
> +
> return page;
> }
>
>
--
error compiling committee.c: too many arguments to function
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
next prev parent reply other threads:[~2007-01-03 8:29 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-01-03 2:10 [patch] kvm: make cr3 loading more robust Ingo Molnar
[not found] ` <20070103021057.GA11316-X9Un+BFzKDI@public.gmane.org>
2007-01-03 8:29 ` Avi Kivity [this message]
[not found] ` <459B695C.5090004-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-01-03 11:52 ` Ingo Molnar
[not found] ` <20070103115230.GB937-X9Un+BFzKDI@public.gmane.org>
2007-01-03 12:00 ` Avi Kivity
[not found] ` <459B9AC7.6020506-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-01-03 12:01 ` Avi Kivity
2007-01-03 12:13 ` Ingo Molnar
[not found] ` <20070103121301.GC2786-X9Un+BFzKDI@public.gmane.org>
2007-01-03 12:25 ` Avi Kivity
[not found] ` <459BA0B4.20804-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-01-03 12:28 ` Ingo Molnar
[not found] ` <20070103122814.GA7350-X9Un+BFzKDI@public.gmane.org>
2007-01-03 12:40 ` Ingo Molnar
[not found] ` <20070103124020.GA9738-X9Un+BFzKDI@public.gmane.org>
2007-01-03 13:14 ` Avi Kivity
[not found] ` <459BAC45.9090202-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-01-03 13:20 ` Ingo Molnar
[not found] ` <20070103132033.GA18027-X9Un+BFzKDI@public.gmane.org>
2007-01-03 13:34 ` Avi Kivity
2007-01-03 12:59 ` Avi Kivity
2007-01-03 11:59 ` Ingo Molnar
[not found] ` <20070103115911.GA2786-X9Un+BFzKDI@public.gmane.org>
2007-01-03 12:06 ` Avi Kivity
[not found] ` <459B9C5C.9060008-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-01-03 12:21 ` Ingo Molnar
[not found] ` <20070103122114.GD2786-X9Un+BFzKDI@public.gmane.org>
2007-01-03 12:29 ` Avi Kivity
[not found] ` <459BA194.8070305-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-01-03 12:32 ` Ingo Molnar
[not found] ` <20070103123253.GA8822-X9Un+BFzKDI@public.gmane.org>
2007-01-03 13:13 ` Avi Kivity
2007-01-03 13:37 ` Ingo Molnar
[not found] ` <20070103133714.GA20638-X9Un+BFzKDI@public.gmane.org>
2007-01-03 13:44 ` Ingo Molnar
[not found] ` <20070103134417.GA22055-X9Un+BFzKDI@public.gmane.org>
2007-01-04 8:58 ` Avi Kivity
[not found] ` <459CC1BC.3070308-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
2007-01-04 9:06 ` Ingo Molnar
2007-01-04 8:55 ` Avi Kivity
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=459B695C.5090004@qumranet.com \
--to=avi-atkuwr5tajbwk0htik3j/w@public.gmane.org \
--cc=kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=mingo-X9Un+BFzKDI@public.gmane.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.