Skip to content

Commit

Permalink
xen/events: add a proper barrier to 2-level uevent unmasking
Browse files Browse the repository at this point in the history
A follow-up patch will require certain write to happen before an event
channel is unmasked.

While the memory barrier is not strictly necessary for all the callers,
the main one will need it. In order to avoid an extra memory barrier
when using fifo event channels, mandate evtchn_unmask() to provide
write ordering.

The 2-level event handling unmask operation is missing an appropriate
barrier, so add it. Fifo event channels are fine in this regard due to
using sync_cmpxchg().

This is part of XSA-332.

Cc: stable@vger.kernel.org
Suggested-by: Julien Grall <julien@xen.org>
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Julien Grall <jgrall@amazon.com>
Reviewed-by: Wei Liu <wl@xen.org>
  • Loading branch information
jgross1 committed Oct 20, 2020
1 parent 073d055 commit 4d3fe31
Showing 1 changed file with 2 additions and 0 deletions.
2 changes: 2 additions & 0 deletions drivers/xen/events/events_2l.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ static void evtchn_2l_unmask(evtchn_port_t port)

BUG_ON(!irqs_disabled());

smp_wmb(); /* All writes before unmask must be visible. */

if (unlikely((cpu != cpu_from_evtchn(port))))
do_hypercall = 1;
else {
Expand Down

0 comments on commit 4d3fe31

Please sign in to comment.