|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] xen/events: fix get_global_virq_handler() usage without hardware domain
commit fe5757f25de6062732c088ae54e2180236632552
Author: Juergen Gross <jgross@xxxxxxxx>
AuthorDate: Thu Mar 6 17:23:36 2025 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Mar 6 17:23:36 2025 +0100
xen/events: fix get_global_virq_handler() usage without hardware domain
Some use cases of get_global_virq_handler() didn't account for the
case of running without hardware domain.
Fix that by testing get_global_virq_handler() returning NULL where
needed (e.g. when directly dereferencing the result).
Fixes: 980822c5edd1 ("xen/events: allow setting of global virq handler only
for unbound virqs")
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/common/event_channel.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
index 4ee6b6b4ce..c68aa97135 100644
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -1036,7 +1036,9 @@ int set_global_virq_handler(struct domain *d, uint32_t
virq)
{
old = global_virq_handlers[virq];
hdl = get_global_virq_handler(virq);
- if ( hdl != d )
+ if ( !hdl )
+ global_virq_handlers[virq] = d;
+ else if ( hdl != d )
{
read_lock(&hdl->event_lock);
@@ -1091,7 +1093,7 @@ struct domain *lock_dom_exc_handler(void)
struct domain *d;
d = get_global_virq_handler(VIRQ_DOM_EXC);
- if ( unlikely(!get_domain(d)) )
+ if ( unlikely(!d) || unlikely(!get_domain(d)) )
return NULL;
read_lock(&d->event_lock);
@@ -1101,6 +1103,9 @@ struct domain *lock_dom_exc_handler(void)
void unlock_dom_exc_handler(struct domain *d)
{
+ if ( likely(!d) )
+ return;
+
read_unlock(&d->event_lock);
put_domain(d);
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |