LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Steven Rostedt <rostedt@goodmis.org>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Kees Cook <keescook@chromium.org>,
Andrew Morton <akpm@linux-foundation.org>,
tcharding <me@tobin.cc>
Subject: Re: [PATCH] vsprintf: Fix memory barriers of ptr_key to have_filed_random_ptr_key
Date: Tue, 15 May 2018 19:00:22 -0400 [thread overview]
Message-ID: <20180515190022.3b5f96b4@gandalf.local.home> (raw)
In-Reply-To: <20180515184117.5fb0b7fa@gandalf.local.home>
On Tue, 15 May 2018 18:41:17 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:
> On Tue, 15 May 2018 15:31:37 -0700
> Linus Torvalds <torvalds@linux-foundation.org> wrote:
>
> > > we could always do this:
> >
> > Ugh. I think I prefer the barriers.
>
If it is that if statement you don't like. We can get rid of it. On
early boot, the code is called from preemptable context, it's only
later that it is not. So we know when we can call it directly and when
we need to have a work queue.
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 30c0cb8cc9bc..69d3ed8557ce 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -1669,19 +1669,21 @@ char *pointer_string(char *buf, char *end, const void *ptr,
return number(buf, end, (unsigned long int)ptr, spec);
}
-static bool have_filled_random_ptr_key __read_mostly;
+static DEFINE_STATIC_KEY_TRUE(not_filled_random_ptr_key);
static siphash_key_t ptr_key __read_mostly;
-static void fill_random_ptr_key(struct random_ready_callback *unused)
+static void enable_ptr_key_workfn(struct work_struct *work)
{
get_random_bytes(&ptr_key, sizeof(ptr_key));
- /*
- * have_filled_random_ptr_key==true is dependent on get_random_bytes().
- * ptr_to_id() needs to see have_filled_random_ptr_key==true
- * after get_random_bytes() returns.
- */
- smp_mb();
- WRITE_ONCE(have_filled_random_ptr_key, true);
+ /* Needs to run from preemptable context */
+ static_branch_disable(¬_filled_random_ptr_key);
+}
+
+static DECLARE_WORK(enable_ptr_key_work, enable_ptr_key_workfn);
+
+static void fill_random_ptr_key(struct random_ready_callback *unused)
+{
+ queue_work(system_unbound_wq, &enable_ptr_key_work);
}
static struct random_ready_callback random_ready = {
@@ -1695,7 +1697,7 @@ static int __init initialize_ptr_random(void)
if (!ret) {
return 0;
} else if (ret == -EALREADY) {
- fill_random_ptr_key(&random_ready);
+ enable_ptr_key_workfn(&enable_ptr_key_work);
return 0;
}
@@ -1709,7 +1711,7 @@ static char *ptr_to_id(char *buf, char *end, void *ptr, struct printf_spec spec)
unsigned long hashval;
const int default_width = 2 * sizeof(ptr);
- if (unlikely(!have_filled_random_ptr_key)) {
+ if (static_branch_unlikely(¬_filled_random_ptr_key)) {
spec.field_width = default_width;
/* string length must be less than default_width */
return string(buf, end, "(ptrval)", spec);
-- Steve
next prev parent reply other threads:[~2018-05-15 23:00 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-15 14:05 Steven Rostedt
2018-05-15 16:55 ` Linus Torvalds
2018-05-15 18:57 ` Steven Rostedt
2018-05-15 19:03 ` Linus Torvalds
2018-05-15 20:10 ` Steven Rostedt
2018-05-15 22:31 ` Linus Torvalds
2018-05-15 22:41 ` Steven Rostedt
2018-05-15 23:00 ` Steven Rostedt [this message]
2018-05-15 23:10 ` Linus Torvalds
2018-05-23 10:40 ` Pavel Machek
2018-05-24 18:44 ` Steven Rostedt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180515190022.3b5f96b4@gandalf.local.home \
--to=rostedt@goodmis.org \
--cc=akpm@linux-foundation.org \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=me@tobin.cc \
--cc=peterz@infradead.org \
--cc=torvalds@linux-foundation.org \
--subject='Re: [PATCH] vsprintf: Fix memory barriers of ptr_key to have_filed_random_ptr_key' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).