Message ID | 159664892278.638781.2910775856690967369.stgit@bahia.lan (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | spapr: Cleanups for XIVE and PHB | expand |
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 <groug@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, > >
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,
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 <groug@kaod.org> --- hw/intc/spapr_xive_kvm.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)