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