]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
padata: remove __padata_list_init()
authorTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Fri, 7 Nov 2025 14:49:37 +0000 (23:49 +0900)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 14 Nov 2025 10:15:49 +0000 (18:15 +0800)
syzbot is reporting possibility of deadlock due to sharing lock_class_key
between padata_init_squeues() and padata_init_reorder_list(). This is a
false positive, for these callers initialize different object. Unshare
lock_class_key by embedding __padata_list_init() into these callers.

Reported-by: syzbot+bd936ccd4339cea66e6b@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=bd936ccd4339cea66e6b
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
kernel/padata.c

index f4def028c48c08335c9c95a898a12a412c10a28d..aa66d91e20f9c17e978cfc330d5e4b873fb842d0 100644 (file)
@@ -506,12 +506,6 @@ void __init padata_do_multithreaded(struct padata_mt_job *job)
        padata_works_free(&works);
 }
 
-static void __padata_list_init(struct padata_list *pd_list)
-{
-       INIT_LIST_HEAD(&pd_list->list);
-       spin_lock_init(&pd_list->lock);
-}
-
 /* Initialize all percpu queues used by serial workers */
 static void padata_init_squeues(struct parallel_data *pd)
 {
@@ -521,7 +515,8 @@ static void padata_init_squeues(struct parallel_data *pd)
        for_each_cpu(cpu, pd->cpumask.cbcpu) {
                squeue = per_cpu_ptr(pd->squeue, cpu);
                squeue->pd = pd;
-               __padata_list_init(&squeue->serial);
+               INIT_LIST_HEAD(&squeue->serial.list);
+               spin_lock_init(&squeue->serial.lock);
                INIT_WORK(&squeue->work, padata_serial_worker);
        }
 }
@@ -534,7 +529,8 @@ static void padata_init_reorder_list(struct parallel_data *pd)
 
        for_each_cpu(cpu, pd->cpumask.pcpu) {
                list = per_cpu_ptr(pd->reorder_list, cpu);
-               __padata_list_init(list);
+               INIT_LIST_HEAD(&list->list);
+               spin_lock_init(&list->lock);
        }
 }