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
| ||
|
Message-Id: <200710071938.BJE12993.LQSVOJFHFOOtFM@I-love.SAKURA.ne.jp> Date: Sun, 7 Oct 2007 19:38:33 +0900 From: Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp> To: a.p.zijlstra@...llo.nl Cc: linux-kernel@...r.kernel.org, linux-security-module@...r.kernel.org Subject: Sleeping in RCU list traversal Hello. Peter Zijlstra wrote: > > Can I sleep between rcu_read_lock() and rcu_read_unlock() ? > > As far as I saw, rcu_read_lock() makes in_atomic() true, so I think I can't sleep. > You can indeed not sleep in an rcu_read_lock() section. However, you > could grab a reference on an item, stop the iteration, drop > rcu_read_lock. Do you thing, re-acquire rcu_read_lock(), drop the ref, > and continue the iteration. Something like this? rcu_read_lock(); list_for_each_rcu(p, ...) { ptr = list_entry(p, struct ..., list); /* Grab a reference to "ptr". */ rcu_read_unlock(); my_task_that_may_sleep(ptr); rcu_read_lock(); /* Drop a reference to "ptr". */ } rcu_read_unlock(); Regarding my case, memory region pointed by "ptr" never be removed. Do I need to grab a reference to "ptr" ? Regards. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists