On Wed, Aug 05, 2020 at 07:35:22PM +0200, Greg Kurz wrote: > If the creation of the KVM XIVE device fails for some reasons, the > negative errno ends up in xive->fd, but the rest of the code assumes > that xive->fd either contains an open fd, ie. positive value, or -1. > > This doesn't cause any misbehavior except kvmppc_xive_disconnect() > that will try to close(xive->fd) during rollback and likely be > rewarded with an EBADF. > > Only set xive->fd with a open fd. > > Signed-off-by: Greg Kurz <gr...@kaod.org>
Applied to ppc-for-5.2. > --- > hw/intc/spapr_xive_kvm.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/hw/intc/spapr_xive_kvm.c b/hw/intc/spapr_xive_kvm.c > index edb7ee0e74f1..d55ea4670e0e 100644 > --- a/hw/intc/spapr_xive_kvm.c > +++ b/hw/intc/spapr_xive_kvm.c > @@ -745,6 +745,7 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, > uint32_t nr_servers, > size_t esb_len = (1ull << xsrc->esb_shift) * xsrc->nr_irqs; > size_t tima_len = 4ull << TM_SHIFT; > CPUState *cs; > + int fd; > > /* > * The KVM XIVE device already in use. This is the case when > @@ -760,11 +761,12 @@ int kvmppc_xive_connect(SpaprInterruptController *intc, > uint32_t nr_servers, > } > > /* First, create the KVM XIVE device */ > - xive->fd = kvm_create_device(kvm_state, KVM_DEV_TYPE_XIVE, false); > - if (xive->fd < 0) { > - error_setg_errno(errp, -xive->fd, "XIVE: error creating KVM device"); > + fd = kvm_create_device(kvm_state, KVM_DEV_TYPE_XIVE, false); > + if (fd < 0) { > + error_setg_errno(errp, -fd, "XIVE: error creating KVM device"); > return -1; > } > + xive->fd = fd; > > /* Tell KVM about the # of VCPUs we may have */ > if (kvm_device_check_attr(xive->fd, KVM_DEV_XIVE_GRP_CTRL, > > -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature