From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:42255) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RjVkT-0007kQ-Fv for qemu-devel@nongnu.org; Sat, 07 Jan 2012 07:51:50 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RjVkS-0000aE-8D for qemu-devel@nongnu.org; Sat, 07 Jan 2012 07:51:49 -0500 Received: from v220110690675601.yourvserver.net ([78.47.199.172]:46750) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RjVkS-0000a7-3h for qemu-devel@nongnu.org; Sat, 07 Jan 2012 07:51:48 -0500 Message-ID: <4F05BE55.8030209@weilnetz.de> Date: Thu, 05 Jan 2012 16:14:29 +0100 From: Stefan Weil MIME-Version: 1.0 References: <1325687322-6797-1-git-send-email-avi@redhat.com> <20120104144721.GA5961@redhat.com> In-Reply-To: <20120104144721.GA5961@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH master/stable-1.0] pci: fix corrupted pci conf index register by unaligned write List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: qemu-devel@nongnu.org, "Michael S. Tsirkin" Am 04.01.2012 15:47, schrieb Michael S. Tsirkin: > On Wed, Jan 04, 2012 at 04:28:42PM +0200, Avi Kivity wrote: >> Commit d0ed8076cbdc261 converted the PCI config access to the memory >> API, but also inadvertantly changed it to accept unaligned writes, >> and corrupt the index register in the process. This causes a regression >> booting NetBSD. >> >> Fix by ignoring unaligned or non-dword writes. >> >> https://bugs.launchpad.net/qemu/+bug/897771 >> >> Reported-by: Andreas Gustafsson >> Signed-off-by: Avi Kivity > > Acked-by: Michael S. Tsirkin > >> --- >> >> hw/pci_host.c | 3 +++ >> 1 files changed, 3 insertions(+), 0 deletions(-) >> >> diff --git a/hw/pci_host.c b/hw/pci_host.c >> index 44c6c20..8041778 100644 >> --- a/hw/pci_host.c >> +++ b/hw/pci_host.c >> @@ -101,6 +101,9 @@ static void pci_host_config_write(void *opaque, >> target_phys_addr_t addr, >> >> PCI_DPRINTF("%s addr " TARGET_FMT_plx " len %d val %"PRIx64"\n", >> __func__, addr, len, val); >> + if (addr != 0 || len != 4) { >> + return; >> + } >> s->config_reg = val; >> } >> >> -- >> 1.7.7.1 Non dword writes are quite common. I get them with Linux kernels, too. Do you really want to ignore them? And the check for unaligned writes is, well, unusual :-) Regards, Stefan