CVE-2025-38234: In the Linux kernel, the following vulnerability has been resolved:  sched/rt: Fix race in push_rt_task  Overview ======== When a CPU chooses to call push_rt_task and picks a task to push to another CPU's runqueue then it will call find_lock_lowest_rq method which would take a double lock on both CPUs' runqueues. If one of the locks aren't readily available, it may lead to dropping the current runqueue lock and reacquiring both the locks at once. During this window it is possible that the task is already migrated and is running on some other CPU. These cases are already handled. However, if the task is migrated and has already been executed and another CPU is now trying to wake it up (ttwu) such that it is queued again on the runqeue (on_rq is 1) and also if the task was run by the same CPU, then the current checks will pass even though the task was migrated out and is no longer in the pushable tasks list.  Crashes ======= This bug resulted in quite a few flavors of crashes triggering kernel panics with various crash signatures such as assert failures, page faults, null pointer dereferences, and queue corruption errors all coming from scheduler itself.  Some of the crashes: -> kernel BUG at kernel/sched/rt.c:1616! BUG_ON(idx >= MAX_RT_PRIO)    Call Trace:    ? __die_body+0x1a/0x60    ? die+0x2a/0x50    ? do_trap+0x85/0x100    ? pick_next_task_rt+0x6e/0x1d0    ? do_error_trap+0x64/0xa0    ? pick_next_task_rt+0x6e/0x1d0    ? exc_invalid_op+0x4c/0x60    ? pick_next_task_rt+0x6e/0x1d0    ? asm_exc_invalid_op+0x12/0x20    ? pick_next_task_rt+0x6e/0x1d0    __schedule+0x5cb/0x790    ? update_ts_time_stats+0x55/0x70    schedule_idle+0x1e/0x40    do_idle+0x15e/0x200    cpu_startup_entry+0x19/0x20    start_secondary+0x117/0x160    secondary_startup_64_no_verify+0xb0/0xbb  -> BUG: kernel NULL pointer dereference, address: 00000000000000c0    Call Trace:    ? __die_body+0x1a/0x60    ? no_context+0x183/0x350    ? __warn+0x8a/0xe0    ? exc_page_fault+0x3d6/0x520    ? asm_exc_page_fault+0x1e/0x30    ? pick_next_task_rt+0xb5/0x1d0    ? pick_next_task_rt+0x8c/0x1d0    __schedule+0x583/0x7e0    ? update_ts_time_stats+0x55/0x70    schedule_idle+0x1e/0x40    do_idle+0x15e/0x200    cpu_startup_entry+0x19/0x20    start_secondary+0x117/0x160    secondary_startup_64_no_verify+0xb0/0xbb  -> BUG: unable to handle page fault for address: ffff9464daea5900    kernel BUG at kernel/sched/rt.c:1861! BUG_ON(rq->cpu != task_cpu(p))  -> kernel BUG at kernel/sched/rt.c:1055! BUG_ON(!rq->nr_running)    Call Trace:    ? __die_body+0x1a/0x60    ? die+0x2a/0x50    ? do_trap+0x85/0x100    ? dequeue_top_rt_rq+0xa2/0xb0    ? do_error_trap+0x64/0xa0    ? dequeue_top_rt_rq+0xa2/0xb0    ? exc_invalid_op+0x4c/0x60    ? dequeue_top_rt_rq+0xa2/0xb0    ? asm_exc_invalid_op+0x12/0x20    ? dequeue_top_rt_rq+0xa2/0xb0    dequeue_rt_entity+0x1f/0x70    dequeue_task_rt+0x2d/0x70    __schedule+0x1a8/0x7e0    ? blk_finish_plug+0x25/0x40    schedule+0x3c/0xb0    futex_wait_queue_me+0xb6/0x120    futex_wait+0xd9/0x240    do_futex+0x344/0xa90    ? get_mm_exe_file+0x30/0x60    ? audit_exe_compare+0x58/0x70    ? audit_filter_rules.constprop.26+0x65e/0x1220    __x64_sys_futex+0x148/0x1f0    do_syscall_64+0x30/0x80    entry_SYSCALL_64_after_hwframe+0x62/0xc7  -> BUG: unable to handle page fault for address: ffff8cf3608bc2c0    Call Trace:    ? __die_body+0x1a/0x60    ? no_context+0x183/0x350    ? spurious_kernel_fault+0x171/0x1c0    ? exc_page_fault+0x3b6/0x520    ? plist_check_list+0x15/0x40    ? plist_check_list+0x2e/0x40    ? asm_exc_page_fault+0x1e/0x30    ? _cond_resched+0x15/0x30    ? futex_wait_queue_me+0xc8/0x120    ? futex_wait+0xd9/0x240    ? try_to_wake_up+0x1b8/0x490    ? futex_wake+0x78/0x160    ? do_futex+0xcd/0xa90    ? plist_check_list+0x15/0x40    ? plist_check_list+0x2e/0x40    ? plist_del+0x6a/0xd0    ? plist_check_list+0x15/0x40    ? plist_check_list+0x2e/0x40    ? dequeue_pushable_task+0x20/0x70    ? __schedule+0x382/0x7e0    ? asm_sysvec_reschedule_i ---truncated---