summaryrefslogtreecommitdiffstats
path: root/arch/x86/mm/testmmiotrace.c
diff options
context:
space:
mode:
authorDavid Howells <dhowells@redhat.com>2019-08-20 02:17:56 +0200
committerJames Morris <jmorris@namei.org>2019-08-20 06:54:16 +0200
commit906357f77a077508d160e729f917c5f0a4304f25 (patch)
tree049ecdbb02af347886a383126722b6bc853503a6 /arch/x86/mm/testmmiotrace.c
parentlockdown: Lock down module params that specify hardware parameters (eg. ioport) (diff)
downloadlinux-906357f77a077508d160e729f917c5f0a4304f25.tar.xz
linux-906357f77a077508d160e729f917c5f0a4304f25.zip
x86/mmiotrace: Lock down the testmmiotrace module
The testmmiotrace module shouldn't be permitted when the kernel is locked down as it can be used to arbitrarily read and write MMIO space. This is a runtime check rather than buildtime in order to allow configurations where the same kernel may be run in both locked down or permissive modes depending on local policy. Suggested-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: David Howells <dhowells@redhat.com Signed-off-by: Matthew Garrett <mjg59@google.com> Acked-by: Steven Rostedt (VMware) <rostedt@goodmis.org> Reviewed-by: Kees Cook <keescook@chromium.org> cc: Thomas Gleixner <tglx@linutronix.de> cc: Steven Rostedt <rostedt@goodmis.org> cc: Ingo Molnar <mingo@kernel.org> cc: "H. Peter Anvin" <hpa@zytor.com> cc: x86@kernel.org Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'arch/x86/mm/testmmiotrace.c')
-rw-r--r--arch/x86/mm/testmmiotrace.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/mm/testmmiotrace.c b/arch/x86/mm/testmmiotrace.c
index 0881e1ff1e58..a8bd952e136d 100644
--- a/arch/x86/mm/testmmiotrace.c
+++ b/arch/x86/mm/testmmiotrace.c
@@ -8,6 +8,7 @@
#include <linux/module.h>
#include <linux/io.h>
#include <linux/mmiotrace.h>
+#include <linux/security.h>
static unsigned long mmio_address;
module_param_hw(mmio_address, ulong, iomem, 0);
@@ -115,6 +116,10 @@ static void do_test_bulk_ioremapping(void)
static int __init init(void)
{
unsigned long size = (read_far) ? (8 << 20) : (16 << 10);
+ int ret = security_locked_down(LOCKDOWN_MMIOTRACE);
+
+ if (ret)
+ return ret;
if (mmio_address == 0) {
pr_err("you have to use the module argument mmio_address.\n");