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

Reply via email to