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: Mon, 23 Oct 2017 17:32:00 +0200 From: Florian Westphal <fw@...len.de> To: Peter Zijlstra <peterz@...radead.org> Cc: David Miller <davem@...emloft.net>, fw@...len.de, netdev@...r.kernel.org Subject: Re: problem with rtnetlink 'reference' count Peter Zijlstra <peterz@...radead.org> wrote: > 019a316992ee ("rtnetlink: add reference counting to prevent module unload while dump is in progress") > > And that commit is _completely_ broken. > > 1) it not in fact a refcount, so using refcount_t is silly Your suggestion is...? > 2) there is a distinct lack of memory barriers, so we can easily > observe the decrement while the msg_handler is still in progress. I guess you mean it needs: + smp_mb__before_atomic(); refcount_dec(&rtnl_msg_handlers_ref[family]); ? However, this refcount_dec is misplaced anyway as it would need to occur from nlcb->done() (the handler function gets stored in socket for use by next recvmsg), so this change is indeed not helpful at all. > 3) waiting with a schedule()/yield() loop is complete crap and subject > life-locks, imagine doing that rtnl_unregister_all() from a RT task. Whats the alternative? Only one I see is to pass THIS_MODULE to hook reg/unreg so we know what module registered the family for purpose of module get/put but thats going to be messy. Alternatively we can of course sleep instead of schedule() but that doesn't appear too appealing either (albeit it is a lot less intrusive). Any other idea?
Powered by blists - more mailing lists