From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kees Cook Subject: Re: [PATCH V34 22/29] Lock down tracing and perf kprobes when in confidentiality mode Date: Sat, 22 Jun 2019 17:09:00 -0700 Message-ID: <201906221708.4E617CD@keescook> References: <20190622000358.19895-1-matthewgarrett@google.com> <20190622000358.19895-23-matthewgarrett@google.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <20190622000358.19895-23-matthewgarrett@google.com> Sender: linux-kernel-owner@vger.kernel.org To: Matthew Garrett Cc: jmorris@namei.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-api@vger.kernel.org, David Howells , Alexei Starovoitov , Matthew Garrett , "Naveen N . Rao" , Anil S Keshavamurthy , davem@davemloft.net, Masami Hiramatsu List-Id: linux-api@vger.kernel.org On Fri, Jun 21, 2019 at 05:03:51PM -0700, Matthew Garrett wrote: > From: David Howells > > Disallow the creation of perf and ftrace kprobes when the kernel is > locked down in confidentiality mode by preventing their registration. > This prevents kprobes from being used to access kernel memory to steal > crypto data, but continues to allow the use of kprobes from signed > modules. > > Reported-by: Alexei Starovoitov > Signed-off-by: David Howells > Signed-off-by: Matthew Garrett > Cc: Naveen N. Rao > Cc: Anil S Keshavamurthy > Cc: davem@davemloft.net > Cc: Masami Hiramatsu Reviewed-by: Kees Cook -Kees > --- > include/linux/security.h | 1 + > kernel/trace/trace_kprobe.c | 5 +++++ > security/lockdown/lockdown.c | 1 + > 3 files changed, 7 insertions(+) > > diff --git a/include/linux/security.h b/include/linux/security.h > index 3875f6df2ecc..e6e3e2403474 100644 > --- a/include/linux/security.h > +++ b/include/linux/security.h > @@ -96,6 +96,7 @@ enum lockdown_reason { > LOCKDOWN_MMIOTRACE, > LOCKDOWN_INTEGRITY_MAX, > LOCKDOWN_KCORE, > + LOCKDOWN_KPROBES, > LOCKDOWN_CONFIDENTIALITY_MAX, > }; > > diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c > index 5d5129b05df7..5a76a0f79d48 100644 > --- a/kernel/trace/trace_kprobe.c > +++ b/kernel/trace/trace_kprobe.c > @@ -11,6 +11,7 @@ > #include > #include > #include > +#include > > #include "trace_dynevent.h" > #include "trace_kprobe_selftest.h" > @@ -415,6 +416,10 @@ static int __register_trace_kprobe(struct trace_kprobe *tk) > { > int i, ret; > > + ret = security_locked_down(LOCKDOWN_KPROBES); > + if (ret) > + return ret; > + > if (trace_probe_is_registered(&tk->tp)) > return -EINVAL; > > diff --git a/security/lockdown/lockdown.c b/security/lockdown/lockdown.c > index 4c9b324dfc55..5a08c17f224d 100644 > --- a/security/lockdown/lockdown.c > +++ b/security/lockdown/lockdown.c > @@ -32,6 +32,7 @@ static char *lockdown_reasons[LOCKDOWN_CONFIDENTIALITY_MAX+1] = { > [LOCKDOWN_MMIOTRACE] = "unsafe mmio", > [LOCKDOWN_INTEGRITY_MAX] = "integrity", > [LOCKDOWN_KCORE] = "/proc/kcore access", > + [LOCKDOWN_KPROBES] = "use of kprobes", > [LOCKDOWN_CONFIDENTIALITY_MAX] = "confidentiality", > }; > > -- > 2.22.0.410.gd8fdbe21b5-goog > -- Kees Cook