From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50452) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YDW0E-00010m-6a for qemu-devel@nongnu.org; Tue, 20 Jan 2015 05:25:43 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YDW09-0007Q3-39 for qemu-devel@nongnu.org; Tue, 20 Jan 2015 05:25:42 -0500 Received: from mail-we0-x22b.google.com ([2a00:1450:400c:c03::22b]:58256) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YDW08-0007Pk-Qh for qemu-devel@nongnu.org; Tue, 20 Jan 2015 05:25:37 -0500 Received: by mail-we0-f171.google.com with SMTP id u56so36165350wes.2 for ; Tue, 20 Jan 2015 02:25:36 -0800 (PST) Sender: Paolo Bonzini From: Paolo Bonzini Date: Tue, 20 Jan 2015 11:25:30 +0100 Message-Id: <1421749530-13699-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH] apic: do not dereference pointer before it is checked for NULL List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: armbru@redhat.com Right now you only get to apic_init_reset if you have an APIC (do_cpu_init is reached only if CPU_INTERRUPT_INIT is set and that only happens in hw/intc/apic.c). However, this is wrong because for example a port 92 or keyboard controller reset is really an INIT, and that can happen also with no APIC. So keep the check and fix the error that Coverity reported. Reported-by: Markus Armbruster Signed-off-by: Paolo Bonzini --- hw/intc/apic_common.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/hw/intc/apic_common.c b/hw/intc/apic_common.c index d9bb188..0858b45 100644 --- a/hw/intc/apic_common.c +++ b/hw/intc/apic_common.c @@ -177,13 +177,14 @@ bool apic_next_timer(APICCommonState *s, int64_t current_time) void apic_init_reset(DeviceState *dev) { - APICCommonState *s = APIC_COMMON(dev); - APICCommonClass *info = APIC_COMMON_GET_CLASS(s); + APICCommonState *s; + APICCommonClass *info; int i; - if (!s) { + if (!dev) { return; } + s = APIC_COMMON(dev); s->tpr = 0; s->spurious_vec = 0xff; s->log_dest = 0; @@ -208,6 +209,7 @@ void apic_init_reset(DeviceState *dev) } s->timer_expiry = -1; + info = APIC_COMMON_GET_CLASS(s); if (info->reset) { info->reset(s); } -- 1.8.3.1