Commit 73536338 authored by Eiichi Tsukata's avatar Eiichi Tsukata Committed by Paolo Bonzini

KVM: x86/xen: Fix eventfd error handling in kvm_xen_eventfd_assign()

Should not call eventfd_ctx_put() in case of error.

Fixes: 2fd6df2f ("KVM: x86/xen: intercept EVTCHNOP_send from guests")
Reported-by: syzbot+6f0c896c5a9449a10ded@syzkaller.appspotmail.com
Signed-off-by: default avatarEiichi Tsukata <eiichi.tsukata@nutanix.com>
Message-Id: <20221028092631.117438-1-eiichi.tsukata@nutanix.com>
[Introduce new goto target instead. - Paolo]
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 696db303
...@@ -1666,18 +1666,18 @@ static int kvm_xen_eventfd_assign(struct kvm *kvm, ...@@ -1666,18 +1666,18 @@ static int kvm_xen_eventfd_assign(struct kvm *kvm,
case EVTCHNSTAT_ipi: case EVTCHNSTAT_ipi:
/* IPI must map back to the same port# */ /* IPI must map back to the same port# */
if (data->u.evtchn.deliver.port.port != data->u.evtchn.send_port) if (data->u.evtchn.deliver.port.port != data->u.evtchn.send_port)
goto out; /* -EINVAL */ goto out_noeventfd; /* -EINVAL */
break; break;
case EVTCHNSTAT_interdomain: case EVTCHNSTAT_interdomain:
if (data->u.evtchn.deliver.port.port) { if (data->u.evtchn.deliver.port.port) {
if (data->u.evtchn.deliver.port.port >= max_evtchn_port(kvm)) if (data->u.evtchn.deliver.port.port >= max_evtchn_port(kvm))
goto out; /* -EINVAL */ goto out_noeventfd; /* -EINVAL */
} else { } else {
eventfd = eventfd_ctx_fdget(data->u.evtchn.deliver.eventfd.fd); eventfd = eventfd_ctx_fdget(data->u.evtchn.deliver.eventfd.fd);
if (IS_ERR(eventfd)) { if (IS_ERR(eventfd)) {
ret = PTR_ERR(eventfd); ret = PTR_ERR(eventfd);
goto out; goto out_noeventfd;
} }
} }
break; break;
...@@ -1717,6 +1717,7 @@ static int kvm_xen_eventfd_assign(struct kvm *kvm, ...@@ -1717,6 +1717,7 @@ static int kvm_xen_eventfd_assign(struct kvm *kvm,
out: out:
if (eventfd) if (eventfd)
eventfd_ctx_put(eventfd); eventfd_ctx_put(eventfd);
out_noeventfd:
kfree(evtchnfd); kfree(evtchnfd);
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment