]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
sched_ext: Fix the memleak for sch->helper objects
authorZqiang <qiang.zhang@linux.dev>
Mon, 8 Dec 2025 11:23:19 +0000 (19:23 +0800)
committerTejun Heo <tj@kernel.org>
Mon, 8 Dec 2025 17:08:17 +0000 (07:08 -1000)
This commit use kthread_destroy_worker() to release sch->helper
objects to fix the following kmemleak:

unreferenced object 0xffff888121ec7b00 (size 128):
  comm "scx_simple", pid 1197, jiffies 4295884415
  hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 ad 4e ad de  .............N..
    ff ff ff ff 00 00 00 00 ff ff ff ff ff ff ff ff  ................
  backtrace (crc 587b3352):
    kmemleak_alloc+0x62/0xa0
    __kmalloc_cache_noprof+0x28d/0x3e0
    kthread_create_worker_on_node+0xd5/0x1f0
    scx_enable.isra.210+0x6c2/0x25b0
    bpf_scx_reg+0x12/0x20
    bpf_struct_ops_link_create+0x2c3/0x3b0
    __sys_bpf+0x3102/0x4b00
    __x64_sys_bpf+0x79/0xc0
    x64_sys_call+0x15d9/0x1dd0
    do_syscall_64+0xf0/0x470
    entry_SYSCALL_64_after_hwframe+0x77/0x7f

Fixes: bff3b5aec1b7 ("sched_ext: Move disable machinery into scx_sched")
Cc: stable@vger.kernel.org # v6.16+
Signed-off-by: Zqiang <qiang.zhang@linux.dev>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext.c

index 05f5a49e9649a98e876da02f98d503e0376b262c..073b669869cb0d8fdbb8008e6ee9a278e60e35cf 100644 (file)
@@ -3575,7 +3575,7 @@ static void scx_sched_free_rcu_work(struct work_struct *work)
        int node;
 
        irq_work_sync(&sch->error_irq_work);
-       kthread_stop(sch->helper->task);
+       kthread_destroy_worker(sch->helper);
 
        free_percpu(sch->pcpu);
 
@@ -4786,7 +4786,7 @@ static struct scx_sched *scx_alloc_and_add_sched(struct sched_ext_ops *ops)
        return sch;
 
 err_stop_helper:
-       kthread_stop(sch->helper->task);
+       kthread_destroy_worker(sch->helper);
 err_free_pcpu:
        free_percpu(sch->pcpu);
 err_free_gdsqs: