Besides with add_page_to_event_array() the function also needs to
synchronize with evtchn_fifo_init_control() setting both d->evtchn_fifo
and (subsequently) d->evtchn_port_ops.
This is XSA-359 / CVE-2020-29571.
Reported-by: Julien Grall <jgrall@amazon.com>
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Julien Grall <jgrall@amazon.com>
master commit:
dc8b01affd7f6f36d34c3854f51df0847df3ec0e
master date: 2020-12-15 13:42:51 +0100
{
unsigned int p, w;
+ /*
+ * Callers aren't required to hold d->event_lock, so we need to synchronize
+ * with evtchn_fifo_init_control() setting d->evtchn_port_ops /after/
+ * d->evtchn_fifo.
+ */
+ smp_rmb();
+
if ( unlikely(port >= d->evtchn_fifo->num_evtchns) )
return NULL;
if ( rc < 0 )
goto error;
+ /*
+ * This call, as a side effect, synchronizes with
+ * evtchn_fifo_word_from_port().
+ */
rc = map_control_block(v, gfn, offset);
if ( rc < 0 )
goto error;