From: Jan Kiszka <jan.kiszka@web.de>
To: Avi Kivity <avi@redhat.com>
Cc: kvm-devel <kvm@vger.kernel.org>,
Glauber Costa <glommer@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>
Subject: [PATCH v2] kvm: Fix overlapping check for memory slots
Date: Mon, 13 Apr 2009 11:59:32 +0200 [thread overview]
Message-ID: <49E30D04.3090903@web.de> (raw)
In-Reply-To: <49E06754.8050906@web.de>
[-- Attachment #1: Type: text/plain, Size: 1672 bytes --]
When checking for overlapping slots on registration of a new one, kvm
currently also considers zero-length (ie. deleted) slots and rejects
requests incorrectly. This finally denies user space from joining slots.
Fix the check by skipping deleted slots and advertise this via a
KVM_CAP_JOIN_MEMORY_REGIONS_WORKS.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
include/linux/kvm.h | 2 ++
virt/kvm/kvm_main.c | 3 ++-
2 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index ee755e2..644e3a9 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -413,6 +413,8 @@ struct kvm_trace_rec {
#define KVM_CAP_DEVICE_MSIX 28
#endif
#define KVM_CAP_ASSIGN_DEV_IRQ 29
+/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
+#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
#ifdef KVM_CAP_IRQ_ROUTING
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 363af32..3265566 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1117,7 +1117,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
for (i = 0; i < KVM_MEMORY_SLOTS; ++i) {
struct kvm_memory_slot *s = &kvm->memslots[i];
- if (s == memslot)
+ if (s == memslot || !s->npages)
continue;
if (!((base_gfn + npages <= s->base_gfn) ||
(base_gfn >= s->base_gfn + s->npages)))
@@ -2262,6 +2262,7 @@ static long kvm_dev_ioctl_check_extension_generic(long arg)
switch (arg) {
case KVM_CAP_USER_MEMORY:
case KVM_CAP_DESTROY_MEMORY_REGION_WORKS:
+ case KVM_CAP_JOIN_MEMORY_REGIONS_WORKS:
return 1;
#ifdef CONFIG_HAVE_KVM_IRQCHIP
case KVM_CAP_IRQ_ROUTING:
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: Jan Kiszka <jan.kiszka@web.de>
To: Avi Kivity <avi@redhat.com>
Cc: Glauber Costa <glommer@redhat.com>,
qemu-devel <qemu-devel@nongnu.org>,
kvm-devel <kvm@vger.kernel.org>
Subject: [Qemu-devel] [PATCH v2] kvm: Fix overlapping check for memory slots
Date: Mon, 13 Apr 2009 11:59:32 +0200 [thread overview]
Message-ID: <49E30D04.3090903@web.de> (raw)
In-Reply-To: <49E06754.8050906@web.de>
[-- Attachment #1: Type: text/plain, Size: 1672 bytes --]
When checking for overlapping slots on registration of a new one, kvm
currently also considers zero-length (ie. deleted) slots and rejects
requests incorrectly. This finally denies user space from joining slots.
Fix the check by skipping deleted slots and advertise this via a
KVM_CAP_JOIN_MEMORY_REGIONS_WORKS.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
include/linux/kvm.h | 2 ++
virt/kvm/kvm_main.c | 3 ++-
2 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index ee755e2..644e3a9 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -413,6 +413,8 @@ struct kvm_trace_rec {
#define KVM_CAP_DEVICE_MSIX 28
#endif
#define KVM_CAP_ASSIGN_DEV_IRQ 29
+/* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
+#define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
#ifdef KVM_CAP_IRQ_ROUTING
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 363af32..3265566 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1117,7 +1117,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
for (i = 0; i < KVM_MEMORY_SLOTS; ++i) {
struct kvm_memory_slot *s = &kvm->memslots[i];
- if (s == memslot)
+ if (s == memslot || !s->npages)
continue;
if (!((base_gfn + npages <= s->base_gfn) ||
(base_gfn >= s->base_gfn + s->npages)))
@@ -2262,6 +2262,7 @@ static long kvm_dev_ioctl_check_extension_generic(long arg)
switch (arg) {
case KVM_CAP_USER_MEMORY:
case KVM_CAP_DESTROY_MEMORY_REGION_WORKS:
+ case KVM_CAP_JOIN_MEMORY_REGIONS_WORKS:
return 1;
#ifdef CONFIG_HAVE_KVM_IRQCHIP
case KVM_CAP_IRQ_ROUTING:
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]
next prev parent reply other threads:[~2009-04-13 9:59 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-11 9:48 [PATCH] kvm: Fix overlapping check for memory slots Jan Kiszka
2009-04-11 9:48 ` [Qemu-devel] " Jan Kiszka
2009-04-13 5:47 ` Sheng Yang
2009-04-13 5:47 ` [Qemu-devel] " Sheng Yang
2009-04-13 8:50 ` Jan Kiszka
2009-04-13 8:50 ` [Qemu-devel] " Jan Kiszka
2009-04-13 8:53 ` Sheng Yang
2009-04-13 8:53 ` [Qemu-devel] " Sheng Yang
2009-04-13 9:03 ` Jan Kiszka
2009-04-13 9:03 ` [Qemu-devel] " Jan Kiszka
2009-04-13 9:32 ` Avi Kivity
2009-04-13 9:32 ` [Qemu-devel] " Avi Kivity
2009-04-13 9:42 ` Jan Kiszka
2009-04-13 9:42 ` [Qemu-devel] " Jan Kiszka
2009-04-13 9:49 ` Avi Kivity
2009-04-13 9:49 ` [Qemu-devel] " Avi Kivity
2009-04-13 9:59 ` Jan Kiszka [this message]
2009-04-13 9:59 ` [Qemu-devel] [PATCH v2] " Jan Kiszka
2009-04-13 13:04 ` Avi Kivity
2009-04-13 13:04 ` [Qemu-devel] " 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=49E30D04.3090903@web.de \
--to=jan.kiszka@web.de \
--cc=avi@redhat.com \
--cc=glommer@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=qemu-devel@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.