lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Sat, 1 Jun 2019 17:23:32 +0800 From: Kefeng Wang <wangkefeng.wang@...wei.com> To: Steffen Klassert <steffen.klassert@...unet.com>, Herbert Xu <herbert@...dor.apana.org.au>, "David S. Miller" <davem@...emloft.net> CC: <linuxcrypto@...r.kernel.org>, <linux-kernel@...r.kernel.org>, Kefeng Wang <wangkefeng.wang@...wei.com>, Hulk Robot <hulkci@...wei.com> Subject: [PATCH v2] crypto: pcrypt: Fix possible deadlock in padata_sysfs_release There is a deadlock issue in pcrypt_init_padata(), pcrypt_init_padata() cpus_read_lock() padata_free() padata_sysfs_release() cpus_read_lock() Narrow rcu_read_lock/unlock() and move put_online_cpus() before padata_free() to fix it. Reported-by: Hulk Robot <hulkci@...wei.com> Signed-off-by: Kefeng Wang <wangkefeng.wang@...wei.com> --- crypto/pcrypt.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c index 0e9ce329fd47..f3dacb714cd4 100644 --- a/crypto/pcrypt.c +++ b/crypto/pcrypt.c @@ -407,16 +407,19 @@ static int pcrypt_init_padata(struct padata_pcrypt *pcrypt, int ret = -ENOMEM; struct pcrypt_cpumask *mask; - get_online_cpus(); pcrypt->wq = alloc_workqueue("%s", WQ_MEM_RECLAIM | WQ_CPU_INTENSIVE, 1, name); if (!pcrypt->wq) goto err; + get_online_cpus(); + pcrypt->pinst = padata_alloc_possible(pcrypt->wq); - if (!pcrypt->pinst) + if (!pcrypt->pinst) { + put_online_cpus(); goto err_destroy_workqueue; + } mask = kmalloc(sizeof(*mask), GFP_KERNEL); if (!mask) @@ -448,12 +451,11 @@ static int pcrypt_init_padata(struct padata_pcrypt *pcrypt, free_cpumask_var(mask->mask); kfree(mask); err_free_padata: + put_online_cpus(); padata_free(pcrypt->pinst); err_destroy_workqueue: destroy_workqueue(pcrypt->wq); err: - put_online_cpus(); - return ret; } -- 2.20.1
Powered by blists - more mailing lists