From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: [PATCHv2] qemu-kvm: routing table update thinko fix Date: Thu, 23 Jul 2009 11:52:16 +0300 Message-ID: <20090723085216.GA10799@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii To: kvm@vger.kernel.org, avi@redhat.com, gleb@redhat.com, mtosatti@redhat.com Return-path: Received: from mx2.redhat.com ([66.187.237.31]:50612 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750990AbZGWIxO (ORCPT ); Thu, 23 Jul 2009 04:53:14 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6N8rEJc005405 for ; Thu, 23 Jul 2009 04:53:14 -0400 Content-Disposition: inline Sender: kvm-owner@vger.kernel.org List-ID: When updating irq routing entries, we should memcpy the new entry over the old one. Current code gets it wrong, and only works because it's uncommon for guests to change tables. Signed-off-by: Michael S. Tsirkin --- Changes since v1: updated irqchip case as well qemu-kvm.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qemu-kvm.c b/qemu-kvm.c index 60e5eac..b4de9c6 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -1544,7 +1544,7 @@ int kvm_update_routing_entry(kvm_context_t kvm, case KVM_IRQ_ROUTING_IRQCHIP: if (e->u.irqchip.irqchip == entry->u.irqchip.irqchip && e->u.irqchip.pin == entry->u.irqchip.pin) { - memcpy(&e->u.irqchip, &entry->u.irqchip, sizeof e->u.irqchip); + memcpy(&e->u.irqchip, &newentry->u.irqchip, sizeof e->u.irqchip); return 0; } break; @@ -1552,7 +1552,7 @@ int kvm_update_routing_entry(kvm_context_t kvm, if (e->u.msi.address_lo == entry->u.msi.address_lo && e->u.msi.address_hi == entry->u.msi.address_hi && e->u.msi.data == entry->u.msi.data) { - memcpy(&e->u.msi, &entry->u.msi, sizeof e->u.msi); + memcpy(&e->u.msi, &newentry->u.msi, sizeof e->u.msi); return 0; } break; -- 1.6.2.5