From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pawel Moll Subject: Re: [PATCH 2/3] virtio: mmio: fix signature checking for BE guests Date: Mon, 14 Oct 2013 09:46:25 +0100 Message-ID: <1381740385.3247.6.camel@hornet> References: <1381502171-8187-1-git-send-email-marc.zyngier@arm.com> <1381502171-8187-3-git-send-email-marc.zyngier@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: "linux-arm-kernel@lists.infradead.org" , "kvmarm@lists.cs.columbia.edu" , "kvm@vger.kernel.org" , Rusty Russell , "Michael S. Tsirkin" To: Marc Zyngier Return-path: Received: from service87.mimecast.com ([91.220.42.44]:33212 "EHLO service87.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754184Ab3JNIq3 convert rfc822-to-8bit (ORCPT ); Mon, 14 Oct 2013 04:46:29 -0400 In-Reply-To: <1381502171-8187-3-git-send-email-marc.zyngier@arm.com> Sender: kvm-owner@vger.kernel.org List-ID: On Fri, 2013-10-11 at 15:36 +0100, Marc Zyngier wrote: > As virtio-mmio config registers are specified to be little-endian, > using readl() to read the magic value and then memcmp() to check it > fails on BE (as readl() has an implicit swab). >=20 > Fix it by encoding the magic value as an integer instead of a string. >=20 > Cc: Rusty Russell > Cc: Michael S. Tsirkin > Cc: Pawel Moll > Signed-off-by: Marc Zyngier > --- > drivers/virtio/virtio_mmio.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) >=20 > diff --git a/drivers/virtio/virtio_mmio.c b/drivers/virtio/virtio_mmi= o.c > index 1ba0d68..57f24fd 100644 > --- a/drivers/virtio/virtio_mmio.c > +++ b/drivers/virtio/virtio_mmio.c > @@ -470,7 +470,7 @@ static int virtio_mmio_probe(struct platform_devi= ce *pdev) > =20 > /* Check magic value */ > magic =3D readl(vm_dev->base + VIRTIO_MMIO_MAGIC_VALUE); > - if (memcmp(&magic, "virt", 4) !=3D 0) { > + if (magic !=3D ('v' | 'i' << 8 | 'r' << 16 | 't' << 24)) { > dev_warn(&pdev->dev, "Wrong magic value 0x%08lx!\n", magic); > return -ENODEV; > } The new spec will clarify this: * 0x000 | R | MagicValue Magic value. Must be 0x74726976 (a Little Endian equivalent of a "virt" string). =2E.. but I like the 'v'i'r't' characters still being there :-) Acked-by: Pawel Moll Pawe=C5=82