mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
evtchn/FIFO: add 2nd smp_rmb() to evtchn_fifo_word_from_port()
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>
This commit is contained in:
1 parent
ca85682e8c
commit
dc8b01affd
1 file changed
+11
@@ -55,6 +55,13 @@ static inline event_word_t *evtchn_fifo_word_from_port(const struct domain *d,
|
||||
{
|
||||
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;
|
||||
|
||||
@@ -605,6 +612,10 @@ int evtchn_fifo_init_control(struct evtchn_init_control *init_control)
|
||||
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;
|
||||
|
||||