Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

padata: remove __padata_list_init()

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>

authored by

Tetsuo Handa and committed by
Herbert Xu
af3852cd 06c489ce

+4 -8
+4 -8
kernel/padata.c
··· 506 506 padata_works_free(&works); 507 507 } 508 508 509 - static void __padata_list_init(struct padata_list *pd_list) 510 - { 511 - INIT_LIST_HEAD(&pd_list->list); 512 - spin_lock_init(&pd_list->lock); 513 - } 514 - 515 509 /* Initialize all percpu queues used by serial workers */ 516 510 static void padata_init_squeues(struct parallel_data *pd) 517 511 { ··· 515 521 for_each_cpu(cpu, pd->cpumask.cbcpu) { 516 522 squeue = per_cpu_ptr(pd->squeue, cpu); 517 523 squeue->pd = pd; 518 - __padata_list_init(&squeue->serial); 524 + INIT_LIST_HEAD(&squeue->serial.list); 525 + spin_lock_init(&squeue->serial.lock); 519 526 INIT_WORK(&squeue->work, padata_serial_worker); 520 527 } 521 528 } ··· 529 534 530 535 for_each_cpu(cpu, pd->cpumask.pcpu) { 531 536 list = per_cpu_ptr(pd->reorder_list, cpu); 532 - __padata_list_init(list); 537 + INIT_LIST_HEAD(&list->list); 538 + spin_lock_init(&list->lock); 533 539 } 534 540 } 535 541