From: Matthew Garrett Date: Mon, 9 Sep 2013 22:49:44 +0000 (-0700) Subject: x86: Restrict MSR access when securelevel is set X-Git-Tag: v4.1.12-92~310^2~5 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=5c700e60c8c54a4f552af3bd79b5c4e431b761f1;p=users%2Fjedix%2Flinux-maple.git x86: Restrict MSR access when securelevel is set Orabug: 21539498 Permitting write access to MSRs allows userspace to modify the running kernel. Prevent this if securelevel has been set. Based on a patch by Kees Cook. Cc: Kees Cook Signed-off-by: Matthew Garrett Signed-off-by: Santosh Shilimkar --- diff --git a/arch/x86/kernel/msr.c b/arch/x86/kernel/msr.c index 113e70784854..979517195ec0 100644 --- a/arch/x86/kernel/msr.c +++ b/arch/x86/kernel/msr.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -105,6 +106,9 @@ static ssize_t msr_write(struct file *file, const char __user *buf, int err = 0; ssize_t bytes = 0; + if (get_securelevel() > 0) + return -EPERM; + if (count % 8) return -EINVAL; /* Invalid chunk size */ @@ -152,6 +156,10 @@ static long msr_ioctl(struct file *file, unsigned int ioc, unsigned long arg) err = -EBADF; break; } + if (get_securelevel() > 0) { + err = -EPERM; + break; + } if (copy_from_user(®s, uregs, sizeof regs)) { err = -EFAULT; break;