On 01.08.2025 22:24, Stewart Hildebrand wrote:
> @@ -839,6 +839,9 @@ void sched_destroy_vcpu(struct vcpu *v)
>  {
>      struct sched_unit *unit = v->sched_unit;
>  
> +    if ( !unit )
> +        return;
> +
>      kill_timer(&v->periodic_timer);
>      kill_timer(&v->singleshot_timer);
>      kill_timer(&v->poll_timer);

What if it's the 2nd error path in sched_init_vcpu() that is taken? Then we
might take this path (just out of context here)

    if ( unit->vcpu_list == v )
    {
        rcu_read_lock(&sched_res_rculock);

        sched_remove_unit(vcpu_scheduler(v), unit);
        sched_free_udata(vcpu_scheduler(v), unit->priv);

and at least Credit1's hook doesn't look to be safe against being passed NULL.
(Not to speak of the risk of unit->priv being used elsewhere while cleaning
up.)

Jan

Reply via email to