xen/evtchn: fix wrong usage of array_index_nospec()

The size passed to array_index_nospec() in evtchn_fifo_word_from_port()
doesn't match the value it is meant to clamp.

Fix it by clamping the port to a safe interval and use that value to
calculate the event_array[] index and the offset into the page
addressed by the array element.

Fixes: 443d3ab6da ("evtchn: block speculative out-of-bound accesses")
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Juergen Gross authored and Jan Beulich committed 2026-08-03 09:50:07 +02:00
1 parent a8606445b1
commit 3a6cb6aae4
1 file changed
+2 -3
+2 -3
View File
@@ -71,11 +71,10 @@ static inline event_word_t *evtchn_fifo_word_from_port(const struct domain *d,
*/
smp_rmb();
p = array_index_nospec(port / EVTCHN_FIFO_EVENT_WORDS_PER_PAGE,
d->evtchn_fifo->num_evtchns);
p = array_index_nospec(port, d->evtchn_fifo->num_evtchns);
w = port % EVTCHN_FIFO_EVENT_WORDS_PER_PAGE;
return d->evtchn_fifo->event_array[p] + w;
return d->evtchn_fifo->event_array[p / EVTCHN_FIFO_EVENT_WORDS_PER_PAGE] + w;
}
static void cf_check evtchn_fifo_init(struct domain *d, struct evtchn *evtchn)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.