dbc4a9b
From: Matthew Garrett <matthew.garrett@nebula.com>
dbc4a9b
Date: Fri, 8 Feb 2013 11:12:13 -0800
dbc4a9b
Subject: [PATCH] x86: Restrict MSR access when module loading is restricted
dbc4a9b
dbc4a9b
Writing to MSRs should not be allowed if module loading is restricted,
dbc4a9b
since it could lead to execution of arbitrary code in kernel mode. Based
dbc4a9b
on a patch by Kees Cook.
dbc4a9b
dbc4a9b
Cc: Kees Cook <keescook@chromium.org>
dbc4a9b
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
dbc4a9b
---
dbc4a9b
 arch/x86/kernel/msr.c | 7 +++++++
dbc4a9b
 1 file changed, 7 insertions(+)
dbc4a9b
dbc4a9b
diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c
dbc4a9b
index c9603ac80de5..8bef43fc3f40 100644
dbc4a9b
--- a/arch/x86/kernel/msr.c
dbc4a9b
+++ b/arch/x86/kernel/msr.c
dbc4a9b
@@ -103,6 +103,9 @@ static ssize_t msr_write(struct file *file, const char __user *buf,
dbc4a9b
 	int err = 0;
dbc4a9b
 	ssize_t bytes = 0;
dbc4a9b
 
dbc4a9b
+	if (secure_modules())
dbc4a9b
+		return -EPERM;
dbc4a9b
+
dbc4a9b
 	if (count % 8)
dbc4a9b
 		return -EINVAL;	/* Invalid chunk size */
dbc4a9b
 
dbc4a9b
@@ -150,6 +153,10 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg)
dbc4a9b
 			err = -EBADF;
dbc4a9b
 			break;
dbc4a9b
 		}
dbc4a9b
+		if (secure_modules()) {
dbc4a9b
+			err = -EPERM;
dbc4a9b
+			break;
dbc4a9b
+		}
dbc4a9b
 		if (copy_from_user(&regs, uregs, sizeof regs)) {
dbc4a9b
 			err = -EFAULT;
dbc4a9b
 			break;
dbc4a9b
-- 
dbc4a9b
1.9.3
dbc4a9b