From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Greg Kurz <gkurz@linux.vnet.ibm.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
james.hogan@imgtec.com, mingo@redhat.com,
linux-mips@linux-mips.org, kvm@vger.kernel.org,
linux-kernel@vger.kernel.org,
David Hildenbrand <dahi@linux.vnet.ibm.com>,
qemu-ppc@nongnu.org, Cornelia Huck <cornelia.huck@de.ibm.com>,
Paul Mackerras <paulus@samba.org>,
David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [PATCH v4 2/2] KVM: move vcpu id checking to archs
Date: Thu, 21 Apr 2016 18:00:19 +0200 [thread overview]
Message-ID: <20160421160018.GA31953@potion> (raw)
In-Reply-To: <146124811255.32509.17679765789502091772.stgit@bahia.huguette.org>
2016-04-21 16:20+0200, Greg Kurz:
> Commit 338c7dbadd26 ("KVM: Improve create VCPU parameter (CVE-2013-4587)")
> introduced a check to prevent potential kernel memory corruption in case
> the vcpu id is too great.
>
> Unfortunately this check assumes vcpu ids grow in sequence with a common
> difference of 1, which is wrong: archs are free to use vcpu id as they fit.
> For example, QEMU originated vcpu ids for PowerPC cpus running in boot3s_hv
> mode, can grow with a common difference of 2, 4 or 8: if KVM_MAX_VCPUS is
> 1024, guests may be limited down to 128 vcpus on POWER8.
>
> This means the check does not belong here and should be moved to some arch
> specific function: kvm_arch_vcpu_create() looks like a good candidate.
>
> ARM and s390 already have such a check.
>
> I could not spot any path in the PowerPC or common KVM code where a vcpu
> id is used as described in the above commit: I believe PowerPC can live
> without this check.
>
> In the end, this patch simply moves the check to MIPS and x86. While here,
> we also update the documentation to dissociate vcpu ids from the maximum
> number of vcpus per virtual machine.
>
> Acked-by: James Hogan <james.hogan@imgtec.com>
> Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
> ---
> v4: - updated subject for more clarity on what the patch does
> - added James's and Connie's A-b tags
> - updated documentation
>
> Documentation/virtual/kvm/api.txt | 7 +++----
> arch/mips/kvm/mips.c | 7 ++++++-
> arch/x86/kvm/x86.c | 3 +++
> virt/kvm/kvm_main.c | 3 ---
> 4 files changed, 12 insertions(+), 8 deletions(-)
>
> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
> index 4d0542c5206b..486a1d783b82 100644
> --- a/Documentation/virtual/kvm/api.txt
> +++ b/Documentation/virtual/kvm/api.txt
> @@ -199,11 +199,10 @@ Type: vm ioctl
> Parameters: vcpu id (apic id on x86)
> Returns: vcpu fd on success, -1 on error
>
> -This API adds a vcpu to a virtual machine. The vcpu id is a small integer
> -in the range [0, max_vcpus).
> +This API adds a vcpu to a virtual machine. The vcpu id is a positive integer.
Userspace won't be able to tell if KVM_CREATE_VCPU failed because it
provided too high vcpu_id to an old KVM or because new KVM failed in
other areas. Not a huge problem (because I expect that userspace will
die on both), but a new KVM_CAP would be able to disambiguate it.
Toggleable capability doesn't seem necessary and only PowerPC changes,
so the capability could be arch specific ... I think that a generic one
makes more sense, though.
Userspace also doesn't know the vcpu id limit anymore, and it might
care. What do you think about returning the arch-specific limit (or the
highest positive integer) as int in KVM_CAP_MAX_VCPU_ID?
I think this would also clarify the connection between VCPU limit and
VCPU_ID limit. Or is a boolean cap better?
> -The recommended max_vcpus value can be retrieved using the KVM_CAP_NR_VCPUS of
> -the KVM_CHECK_EXTENSION ioctl() at run-time.
> +The recommended maximum number of vcpus (max_vcpus) can be retrieved using the
> +KVM_CAP_NR_VCPUS of the KVM_CHECK_EXTENSION ioctl() at run-time.
> The maximum possible value for max_vcpus can be retrieved using the
> KVM_CAP_MAX_VCPUS of the KVM_CHECK_EXTENSION ioctl() at run-time.
next prev parent reply other threads:[~2016-04-21 16:00 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-21 14:14 [PATCH v4 0/2] let archs decide for vcpu ids Greg Kurz
2016-04-21 14:14 ` Greg Kurz
2016-04-21 14:15 ` [PATCH v4 1/2] KVM: remove NULL return path for vcpu ids >= KVM_MAX_VCPUS Greg Kurz
2016-04-21 14:17 ` David Hildenbrand
2016-04-21 14:30 ` Greg Kurz
2016-04-26 7:44 ` Cornelia Huck
2016-04-27 9:40 ` Gerg Kurz
2016-04-27 9:40 ` Gerg Kurz
2016-04-27 14:40 ` Radim Krčmář
2016-04-21 14:20 ` [PATCH v4 2/2] KVM: move vcpu id checking to archs Greg Kurz
2016-04-21 16:00 ` Radim Krčmář [this message]
2016-04-21 16:45 ` Greg Kurz
2016-04-21 17:36 ` Radim Krčmář
2016-04-22 9:25 ` Greg Kurz
2016-04-22 9:25 ` Greg Kurz
2016-04-22 10:22 ` Cornelia Huck
2016-04-22 11:19 ` Igor Mammedov
2016-04-22 13:48 ` Radim Krčmář
2016-04-22 13:40 ` Radim Krčmář
2016-04-22 14:50 ` Greg Kurz
2016-04-25 14:15 ` Radim Krčmář
2016-04-25 14:30 ` Greg Kurz
2016-04-22 9:21 ` Wei Yang
2016-04-22 9:21 ` Wei Yang
2016-04-22 9:30 ` Greg Kurz
2016-04-22 9:30 ` Greg Kurz
2016-04-23 0:51 ` Wei Yang
2016-04-23 0:51 ` Wei Yang
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=20160421160018.GA31953@potion \
--to=rkrcmar@redhat.com \
--cc=cornelia.huck@de.ibm.com \
--cc=dahi@linux.vnet.ibm.com \
--cc=david@gibson.dropbear.id.au \
--cc=gkurz@linux.vnet.ibm.com \
--cc=james.hogan@imgtec.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=mingo@redhat.com \
--cc=paulus@samba.org \
--cc=pbonzini@redhat.com \
--cc=qemu-ppc@nongnu.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.