From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LtI54-00074X-3d for qemu-devel@nongnu.org; Mon, 13 Apr 2009 05:03:54 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LtI4z-00074D-ML for qemu-devel@nongnu.org; Mon, 13 Apr 2009 05:03:53 -0400 Received: from [199.232.76.173] (port=39644 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LtI4z-00074A-Gf for qemu-devel@nongnu.org; Mon, 13 Apr 2009 05:03:49 -0400 Received: from fmmailgate03.web.de ([217.72.192.234]:57509) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LtI4y-0002BB-MT for qemu-devel@nongnu.org; Mon, 13 Apr 2009 05:03:49 -0400 Message-ID: <49E2FFF1.9020800@web.de> Date: Mon, 13 Apr 2009 11:03:45 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <49E06754.8050906@web.de> <200904131347.29389.sheng@linux.intel.com> <49E2FCE0.5010509@web.de> <200904131653.54515.sheng@linux.intel.com> In-Reply-To: <200904131653.54515.sheng@linux.intel.com> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig04A36E4610818AD109341F59" Sender: jan.kiszka@web.de Subject: [Qemu-devel] Re: [PATCH] kvm: Fix overlapping check for memory slots Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Sheng Yang Cc: Glauber Costa , Avi Kivity , kvm@vger.kernel.org, qemu-devel This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig04A36E4610818AD109341F59 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable Sheng Yang wrote: > On Monday 13 April 2009 16:50:40 Jan Kiszka wrote: >> Sheng Yang wrote: >>> On Saturday 11 April 2009 17:48:04 Jan Kiszka wrote: >>>> This nice little buglet complicates a smarter slot management in qem= u >>>> user space just "slightly". Sigh... >>>> >>>> --------> >>>> >>>> When checking for overlapping slots on registration of a new one, kv= m >>>> currently also considers zero-length (ie. deleted) slots and rejects= >>>> requests incorrectly. This finally denies user space from joining sl= ots. >>>> Fix the check by skipping deleted slots. >>>> >>>> Signed-off-by: Jan Kiszka >>>> --- >>>> >>>> virt/kvm/kvm_main.c | 2 +- >>>> 1 files changed, 1 insertions(+), 1 deletions(-) >>>> >>>> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c >>>> index 363af32..18f06d2 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 =3D 0; i < KVM_MEMORY_SLOTS; ++i) { >>>> struct kvm_memory_slot *s =3D &kvm->memslots[i]; >>>> >>>> - if (s =3D=3D memslot) >>>> + if (s =3D=3D memslot || !s->npages) >>>> continue; >>>> if (!((base_gfn + npages <=3D s->base_gfn) || >>>> (base_gfn >=3D s->base_gfn + s->npages))) >>> Is it necessary to preserve a valid base_gfn/flags/etc for a zeroed s= lot? >>> Seems kvm_free_physmem_slot didn't clean them. >> It is not necessary as long as we ignore such slots (as this patch doe= s). >=20 > What I think is, if they are invalid and unnecessary to keep, it's bett= er to=20 > clean them rather than add a additional check, for it should covered by= =20 > current check.=20 I think it is cleaner to add an explicit check for "slot unused" (!npages) than re-initializing it with "mostly harmless" values. I've no problem with zeroing them, but the test here should stay. BTW, I was hoping to find a way to initialize deleted slots with safe values from user space to work around this bug, but I found none. :( Jan --------------enig04A36E4610818AD109341F59 Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org iEYEARECAAYFAkni//EACgkQniDOoMHTA+kJEwCfUaoWqJOO3TQpz5bY81A8JiGe pqkAnj/vwIGPj66QrzocKTsL2oP/Nlqx =kmY1 -----END PGP SIGNATURE----- --------------enig04A36E4610818AD109341F59--