[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] xen/sched: fix scheduler callback verification on init


  • To: Ruslan Ruslichenko <ruslichenko.r@xxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Mykyta Poturai <Mykyta_Poturai@xxxxxxxx>
  • Date: Tue, 14 Apr 2026 11:10:21 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ScHZun5Ls8cTAvbEzw8uZSH5eJY0bYlpTajuRZ84vIs=; b=efIuZvgfDFhd9FWkEHhu3OyDYG9SiWSStK2GtGoYMpUyrHZ2j1rKbNKInpxB0eZ/FpZAg/oQLzQlNGdMYzrCxOZkNH3M0x/WFKZW32IjODMo40pbqdPC6I1xbAaYV5WyTe5l072mXW+cJxE2Y5dfFdzm6xEQXFo7qix5J4DQTf53fdAGB1BJ9D4IRUzr0oK1ZSr7d6ZwXfoPyUTpqAgihtqvpEaRr1VFIrJ+yoVZECyII3/0izHs93Cjvdgu7Pc3ESxL4lbLvcgWl2SUq4uSgbOauWWQbW6BzbGVPJxKHRX14Mdgrz50+LV5oyRg88vLiQBhGunuPOK04JBmPyuGkw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YQ1aOJRECjA+VYr/t1Y4A5VptQqULxLDcM/v6Qs/Dzv3cfISXcO5FYhPM3rXCqef1V1WeUm6zbh8QgU4NWZR2cjs47tNin5fOAUNZh+MN2RySnoeoU/pq7f6tc8XyivrQsDZCV+QjoB+adFtMR0EVBN6AORYr75Cwjl+XKY5a9kmSrRlkL+HIScncQhwuyC+p2O1K/ekxWtM27g8WUwJyhYwOa/KfIuEhmmsMR6vOPZzP2/ye7a+4PENKeeejNBI3jNg3Ghs9iob2+791GQQ10D3jiPyIJUHqaFKTGS//BKDQXtxW75D14Lcvt2Ze6Fo1KdWzFqj0xM7TbyMKN+GWg==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Ruslan Ruslichenko <ruslan_ruslichenko@xxxxxxxx>, Dario Faggioli <dfaggioli@xxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, George Dunlap <gwd@xxxxxxxxxxxxxx>
  • Delivery-date: Tue, 14 Apr 2026 11:10:34 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHcyQvWtY5A3fOflECcuP5RifO+2rXebHgA
  • Thread-topic: [PATCH] xen/sched: fix scheduler callback verification on init

On 4/10/26 19:40, Ruslan Ruslichenko wrote:
> From: Ruslan Ruslichenko <Ruslan_Ruslichenko@xxxxxxxx>
> 
> During core scheduler initialization, each registered scheduler
> is sanity tested in two steps:
> 
> - it must provide required callbacks (e.g. init, do_schedule).
> - if global_init callback is present, it must succeed.
> 
> If any of the steps fail, scheduler entry is cleared in global
> 'schedulers' array.
> 
> However, in the current implementation, if verification fails during
> the first step, the scheduler entry is cleared but verification
> sequence is not interrupted. This lead to NULL pointer dereference
> when subsequent required callbacks verified, and possible during
> the second step.
> 
> The patch fixes the crashes by adding check inside sched_test_func
> macro and skipping the call to a global_init if first step did not pass.
> 
> Signed-off-by: Ruslan Ruslichenko <Ruslan_Ruslichenko@xxxxxxxx>
> ---
>   xen/common/sched/core.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/common/sched/core.c b/xen/common/sched/core.c
> index a57d5dd929..4270c89491 100644
> --- a/xen/common/sched/core.c
> +++ b/xen/common/sched/core.c
> @@ -3017,7 +3017,7 @@ void __init scheduler_init(void)
>       for ( i = 0; i < NUM_SCHEDULERS; i++)
>       {
>   #define sched_test_func(f)                               \
> -        if ( !schedulers[i]->f )                         \
> +        if ( schedulers[i] && !schedulers[i]->f )        \
>           {                                                \
>               printk("scheduler %s misses .%s, dropped\n", \
>                      schedulers[i]->opt_name, #f);         \
 >               schedulers[i] = NULL;                        \

Maybe it would be cleaner to just add "continue" here?

> @@ -3034,6 +3034,9 @@ void __init scheduler_init(void)
>   
>   #undef sched_test_func
>   
> +        if ( !schedulers[i] )
> +            continue;
> +
>           if ( schedulers[i]->global_init && schedulers[i]->global_init() < 0 
> )
>           {
>               printk("scheduler %s failed initialization, dropped\n",

-- 
Mykyta

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.