On 21.08.2025 17:25, Teddy Astie wrote:
> do_poll takes sched_poll* as parameter, but that's actually in guest memory
> (so it's more a guest handle).
No, it's not, or else ...
> --- a/xen/common/sched/core.c
> +++ b/xen/common/sched/core.c
> @@ -1437,21 +1437,13 @@ static void vcpu_block_enable_events(void)
> vcpu_block();
> }
>
> -static long do_poll(const struct sched_poll *sched_poll)
> +static long vcpu_poll(unsigned int nr_ports, uint64_t timeout, evtchn_port_t
> *ports)
> {
> struct vcpu *v = current;
> struct domain *d = v->domain;
> - evtchn_port_t port = 0;
> long rc;
> unsigned int i;
>
> - /* Fairly arbitrary limit. */
> - if ( sched_poll->nr_ports > 128 )
... this access would be a security issue. The handle is ...
> - return -EINVAL;
> -
> - if ( !guest_handle_okay(sched_poll->ports, sched_poll->nr_ports) )
... seen here, the ->ports member.
Here as well as for patch 1 and 3 what is entirely lacking from the description
is the mentioning of why the change is actually going to be useful.
Jan