From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934707AbdCWQkY (ORCPT ); Thu, 23 Mar 2017 12:40:24 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:59160 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752080AbdCWQkW (ORCPT ); Thu, 23 Mar 2017 12:40:22 -0400 Date: Thu, 23 Mar 2017 17:40:13 +0100 From: Cornelia Huck To: David Hildenbrand Cc: kvm@vger.kernel.org, Paolo Bonzini , rkrcmar@redhat.com, Dmitry Vyukov , Marcelo Tosatti , stable@vger.kernel.org, LKML Subject: Re: [PATCH v1] KVM: kvm_io_bus_unregister_dev() should never fail In-Reply-To: <48d409b3-d584-eaa3-24ca-e7330d6fc0e1@redhat.com> References: <20170323143441.5749-1-david@redhat.com> <20170323170635.1fb91a2c.cornelia.huck@de.ibm.com> <48d409b3-d584-eaa3-24ca-e7330d6fc0e1@redhat.com> Organization: IBM Deutschland Research & Development GmbH Vorsitzende des Aufsichtsrats: Martina Koederitz =?UTF-8?B?R2VzY2jDpGZ0c2bDvGhydW5nOg==?= Dirk Wittkopp Sitz der Gesellschaft: =?UTF-8?B?QsO2Ymxpbmdlbg==?= Registergericht: Amtsgericht Stuttgart, HRB 243294 X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.23; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 x-cbid: 17032316-0016-0000-0000-00000462C2E5 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17032316-0017-0000-0000-000026F06F74 Message-Id: <20170323174013.7509b714.cornelia.huck@de.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-03-23_15:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=2 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1702020001 definitions=main-1703230146 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 23 Mar 2017 17:20:48 +0100 David Hildenbrand wrote: > > > As this may set kvm->buses[bus_idx] to NULL, don't you also need to > > guard for bus == NULL in kvm_io_bus_destroy()? (I looked at the code on > > kvm/queue.) > > very right, so something like this? > > diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c > index e1be4b4..ef1aa7f 100644 > --- a/virt/kvm/kvm_main.c > +++ b/virt/kvm/kvm_main.c > @@ -728,7 +728,8 @@ static void kvm_destroy_vm(struct kvm *kvm) > spin_unlock(&kvm_lock); > kvm_free_irq_routing(kvm); > for (i = 0; i < KVM_NR_BUSES; i++) { > - kvm_io_bus_destroy(kvm->buses[i]); > + if (kvm->buses[i]) > + kvm_io_bus_destroy(kvm->buses[i]); > kvm->buses[i] = NULL; > } > kvm_coalesced_mmio_free(kvm); > > Thanks! > > > > >> synchronize_srcu_expedited(&kvm->srcu); > >> kfree(bus); > >> - return r; > >> + return; > >> } > > > > Either that, or an early exit for bus == NULL in kvm_io_bus_destroy(). (I think the second option is more straightforward.)