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: Fri, 10 Jan 2020 22:53:46 +0530 From: Amol Grover <frextrite@...il.com> To: Christoph Hellwig <hch@....de>, Sagi Grimberg <sagi@...mberg.me>, Chaitanya Kulkarni <chaitanya.kulkarni@....com> Cc: linux-nvme@...ts.infradead.org, linux-kernel@...r.kernel.org, linux-kernel-mentees@...ts.linuxfoundation.org, Joel Fernandes <joel@...lfernandes.org>, Madhuparna Bhowmik <madhuparnabhowmik04@...il.com>, "Paul E . McKenney" <paulmck@...nel.org>, Amol Grover <frextrite@...il.com> Subject: [PATCH v2] drivers: nvme: target: core: Pass lockdep expression to RCU lists ctrl->subsys->namespaces and subsys->namespaces are traversed with hlist_for_each_entry_rcu outside an RCU read-side critical section but under the protection of subsys->lock. Hence, add the corresponding lockdep expression to the list traversal primitive to silence false-positive lockdep warnings, and harden RCU lists. Reviewed-by: Joel Fernandes (Google) <joel@...lfernandes.org> Signed-off-by: Amol Grover <frextrite@...il.com> --- v2: - Fix sparse error CHECK: Alignment should match open parenthesis - Remove global macro and use local lockdep expressions drivers/nvme/target/core.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/nvme/target/core.c b/drivers/nvme/target/core.c index 28438b833c1b..c2d6c2dd53fa 100644 --- a/drivers/nvme/target/core.c +++ b/drivers/nvme/target/core.c @@ -555,7 +555,8 @@ int nvmet_ns_enable(struct nvmet_ns *ns) } else { struct nvmet_ns *old; - list_for_each_entry_rcu(old, &subsys->namespaces, dev_link) { + list_for_each_entry_rcu(old, &subsys->namespaces, dev_link, + lockdep_is_held(&subsys->lock)) { BUG_ON(ns->nsid == old->nsid); if (ns->nsid < old->nsid) break; @@ -1172,7 +1173,8 @@ static void nvmet_setup_p2p_ns_map(struct nvmet_ctrl *ctrl, ctrl->p2p_client = get_device(req->p2p_client); - list_for_each_entry_rcu(ns, &ctrl->subsys->namespaces, dev_link) + list_for_each_entry_rcu(ns, &ctrl->subsys->namespaces, dev_link, + lockdep_is_held(&subsys->lock)) nvmet_p2pmem_ns_add_p2p(ctrl, ns); } -- 2.24.1
Powered by blists - more mailing lists