Date: Wed, 25 Oct 2017 21:05:59 +1100 From: "Tobin C. Harding" <me@...in.cc> To: "Jason A. Donenfeld" <Jason@...c4.com> Cc: kernel-hardening@...ts.openwall.com, Theodore Ts'o <tytso@....edu>, Linus Torvalds <torvalds@...ux-foundation.org>, Kees Cook <keescook@...omium.org>, Paolo Bonzini <pbonzini@...hat.com>, Tycho Andersen <tycho@...ker.com>, "Roberts, William C" <william.c.roberts@...el.com>, Tejun Heo <tj@...nel.org>, Jordan Glover <Golden_Miller83@...tonmail.ch>, Greg KH <gregkh@...uxfoundation.org>, Petr Mladek <pmladek@...e.com>, Joe Perches <joe@...ches.com>, Ian Campbell <ijc@...lion.org.uk>, Sergey Senozhatsky <sergey.senozhatsky@...il.com>, Catalin Marinas <catalin.marinas@....com>, Will Deacon <wilal.deacon@....com>, Steven Rostedt <rostedt@...dmis.org>, Chris Fries <cfries@...gle.com>, Dave Weinstein <olorin@...gle.com>, Daniel Micay <danielmicay@...il.com>, Djalal Harouni <tixxdz@...il.com>, LKML <linux-kernel@...r.kernel.org> Subject: Re: [PATCH v7] printk: hash addresses printed with %p On Wed, Oct 25, 2017 at 06:00:21AM +0200, Jason A. Donenfeld wrote: > On Wed, Oct 25, 2017 at 5:49 AM, Tobin C. Harding <me@...in.cc> wrote: > > static_branch_disable(&no_ptr_secret) : Doesn't sleep, just atomic read > > and set and maybe a WARN_ONCE. > > Are you sure about that? I just looked myself, and though there is a > !HAVE_JUMP_LABEL ifdef that does what you described, there's also a > HAVE_JUMP_LABEL that takes a mutex, which sleeps: > > static_branch_disable > static_key_disable > cpus_read_lock > percpu_down_read > percpu_down_read_preempt_disable > might_sleep Hilarious, the actual function name is 'might_sleep' and I missed it. I love being wrong, it means I'm learning. Thanks for taking the time to point this out. > > Now for the 'executes from process context' stuff. > > Er, sorry, I meant to write non-process context in my original > message, which is generally where you're worried about sleeping. Tomorrow I'm going to re-read 'sleeping' sections from ldd3 and Love. > > If the callback mechanism is utilized (i.e print before randomness is > > ready) then the call back will be executed the next time the randomness > > pool gets added to > > So it sounds to me like this might be called in non-process context. > Disaster. I realize the static_key thing was my idea in the original > email, so sorry for leading you astray. You bastard. > But moving to do this in > early_initcall wound up fixing other issues too, so all and all a net > good in going this direction. I wanted to know how to do this since Linus said 'boot time variable' in one of the first comments on this topic. So I'm super glad you pointed it out. > Two options: you stick with static_branch, because it's cool and speed > is fun, and work around all of the above with a call to queue_work so > that static_branch_enable is called only from process context. > > Or, you give up on static_key, because it's not actually super > necessary, and instead just use an atomic, and reason that using `if > (unlikely(!atomic_read(&whatever)))` is probably good enough. In this > option, the code would be pretty much the same as v7, except you'd > s/static_branch/atomic_t/, and change the helpers, etc. This is > probably the more reasonable way. I'm going to sleep, then re-reading these bits. thanks Jason, appreciate your input big time. Cheers, Tobin.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.