Juergen Gross e88a4f
From: Juergen Gross <jgross@suse.com>
Juergen Gross e88a4f
Date: Mon, 12 Apr 2021 07:50:03 +0200
Juergen Gross e88a4f
Subject: [PATCH] xen/events: fix setting irq affinity
Juergen Gross e88a4f
Patch-mainline: Never, only applies to backports to 5.10 and older
Juergen Gross e88a4f
References: bsc#1184583 XSA-332 CVE-2020-27673
Juergen Gross e88a4f
Juergen Gross e88a4f
The backport of upstream patch 25da4618af240fbec61 ("xen/events: don't
Juergen Gross e88a4f
unmask an event channel when an eoi is pending") introduced a
Juergen Gross e88a4f
regression for stable kernels 5.10 and older: setting IRQ affinity for
Juergen Gross e88a4f
IRQs related to interdomain events would no longer work, as moving the
Juergen Gross e88a4f
IRQ to its new cpu was not included in the irq_ack callback for those
Juergen Gross e88a4f
events.
Juergen Gross e88a4f
Juergen Gross e88a4f
Fix that by adding the needed call.
Juergen Gross e88a4f
Juergen Gross e88a4f
Note that kernels 5.11 and later don't need the explicit moving of the
Juergen Gross e88a4f
IRQ to the target cpu in the irq_ack callback, due to a rework of the
Juergen Gross e88a4f
affinity setting in kernel 5.11.
Juergen Gross e88a4f
Juergen Gross e88a4f
Signed-off-by: Juergen Gross <jgross@suse.com>
Juergen Gross e88a4f
---
Juergen Gross e88a4f
 drivers/xen/events/events_base.c | 4 ++--
Juergen Gross e88a4f
 1 file changed, 2 insertions(+), 2 deletions(-)
Juergen Gross e88a4f
Juergen Gross e88a4f
diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
Juergen Gross e88a4f
index 7bd03f6e0422..ee5269331406 100644
Juergen Gross e88a4f
--- a/drivers/xen/events/events_base.c
Juergen Gross e88a4f
+++ b/drivers/xen/events/events_base.c
Juergen Gross e88a4f
@@ -1809,7 +1809,7 @@ static void lateeoi_ack_dynirq(struct irq_data *data)
Juergen Gross e88a4f
 
Juergen Gross e88a4f
 	if (VALID_EVTCHN(evtchn)) {
Juergen Gross e88a4f
 		do_mask(info, EVT_MASK_REASON_EOI_PENDING);
Juergen Gross e88a4f
-		event_handler_exit(info);
Juergen Gross e88a4f
+		ack_dynirq(data);
Juergen Gross e88a4f
 	}
Juergen Gross e88a4f
 }
Juergen Gross e88a4f
 
Juergen Gross e88a4f
@@ -1820,7 +1820,7 @@ static void lateeoi_mask_ack_dynirq(struct irq_data *data)
Juergen Gross e88a4f
 
Juergen Gross e88a4f
 	if (VALID_EVTCHN(evtchn)) {
Juergen Gross e88a4f
 		do_mask(info, EVT_MASK_REASON_EXPLICIT);
Juergen Gross e88a4f
-		event_handler_exit(info);
Juergen Gross e88a4f
+		ack_dynirq(data);
Juergen Gross e88a4f
 	}
Juergen Gross e88a4f
 }
Juergen Gross e88a4f
 
Juergen Gross e88a4f
-- 
Juergen Gross e88a4f
2.26.2
Juergen Gross e88a4f