Merge branch 'x86-mtrr-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 28 Jan 2020 21:06:05 +0000 (13:06 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 28 Jan 2020 21:06:05 +0000 (13:06 -0800)
Pull x86 mtrr updates from Ingo Molnar:
 "Two changes: restrict /proc/mtrr to CAP_SYS_ADMIN, plus a cleanup"

* 'x86-mtrr-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/mtrr: Require CAP_SYS_ADMIN for all access
  x86/mtrr: Get rid of mtrr_seq_show() forward declaration

arch/x86/kernel/cpu/mtrr/if.c

index 4d36dcc1cf87c5b75bcf085df5e77d745a852070..da532f656a7b82123aa1a28d2a7af4efd2d61b43 100644 (file)
@@ -101,9 +101,6 @@ mtrr_write(struct file *file, const char __user *buf, size_t len, loff_t * ppos)
        int length;
        size_t linelen;
 
-       if (!capable(CAP_SYS_ADMIN))
-               return -EPERM;
-
        memset(line, 0, LINE_SIZE);
 
        len = min_t(size_t, len, LINE_SIZE - 1);
@@ -226,8 +223,6 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
 #ifdef CONFIG_COMPAT
        case MTRRIOC32_ADD_ENTRY:
 #endif
-               if (!capable(CAP_SYS_ADMIN))
-                       return -EPERM;
                err =
                    mtrr_file_add(sentry.base, sentry.size, sentry.type, true,
                                  file, 0);
@@ -236,24 +231,18 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
 #ifdef CONFIG_COMPAT
        case MTRRIOC32_SET_ENTRY:
 #endif
-               if (!capable(CAP_SYS_ADMIN))
-                       return -EPERM;
                err = mtrr_add(sentry.base, sentry.size, sentry.type, false);
                break;
        case MTRRIOC_DEL_ENTRY:
 #ifdef CONFIG_COMPAT
        case MTRRIOC32_DEL_ENTRY:
 #endif
-               if (!capable(CAP_SYS_ADMIN))
-                       return -EPERM;
                err = mtrr_file_del(sentry.base, sentry.size, file, 0);
                break;
        case MTRRIOC_KILL_ENTRY:
 #ifdef CONFIG_COMPAT
        case MTRRIOC32_KILL_ENTRY:
 #endif
-               if (!capable(CAP_SYS_ADMIN))
-                       return -EPERM;
                err = mtrr_del(-1, sentry.base, sentry.size);
                break;
        case MTRRIOC_GET_ENTRY:
@@ -279,8 +268,6 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
 #ifdef CONFIG_COMPAT
        case MTRRIOC32_ADD_PAGE_ENTRY:
 #endif
-               if (!capable(CAP_SYS_ADMIN))
-                       return -EPERM;
                err =
                    mtrr_file_add(sentry.base, sentry.size, sentry.type, true,
                                  file, 1);
@@ -289,8 +276,6 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
 #ifdef CONFIG_COMPAT
        case MTRRIOC32_SET_PAGE_ENTRY:
 #endif
-               if (!capable(CAP_SYS_ADMIN))
-                       return -EPERM;
                err =
                    mtrr_add_page(sentry.base, sentry.size, sentry.type, false);
                break;
@@ -298,16 +283,12 @@ mtrr_ioctl(struct file *file, unsigned int cmd, unsigned long __arg)
 #ifdef CONFIG_COMPAT
        case MTRRIOC32_DEL_PAGE_ENTRY:
 #endif
-               if (!capable(CAP_SYS_ADMIN))
-                       return -EPERM;
                err = mtrr_file_del(sentry.base, sentry.size, file, 1);
                break;
        case MTRRIOC_KILL_PAGE_ENTRY:
 #ifdef CONFIG_COMPAT
        case MTRRIOC32_KILL_PAGE_ENTRY:
 #endif
-               if (!capable(CAP_SYS_ADMIN))
-                       return -EPERM;
                err = mtrr_del_page(-1, sentry.base, sentry.size);
                break;
        case MTRRIOC_GET_PAGE_ENTRY:
@@ -373,28 +354,6 @@ static int mtrr_close(struct inode *ino, struct file *file)
        return single_release(ino, file);
 }
 
-static int mtrr_seq_show(struct seq_file *seq, void *offset);
-
-static int mtrr_open(struct inode *inode, struct file *file)
-{
-       if (!mtrr_if)
-               return -EIO;
-       if (!mtrr_if->get)
-               return -ENXIO;
-       return single_open(file, mtrr_seq_show, NULL);
-}
-
-static const struct file_operations mtrr_fops = {
-       .owner                  = THIS_MODULE,
-       .open                   = mtrr_open,
-       .read                   = seq_read,
-       .llseek                 = seq_lseek,
-       .write                  = mtrr_write,
-       .unlocked_ioctl         = mtrr_ioctl,
-       .compat_ioctl           = mtrr_ioctl,
-       .release                = mtrr_close,
-};
-
 static int mtrr_seq_show(struct seq_file *seq, void *offset)
 {
        char factor;
@@ -426,6 +385,28 @@ static int mtrr_seq_show(struct seq_file *seq, void *offset)
        return 0;
 }
 
+static int mtrr_open(struct inode *inode, struct file *file)
+{
+       if (!mtrr_if)
+               return -EIO;
+       if (!mtrr_if->get)
+               return -ENXIO;
+       if (!capable(CAP_SYS_ADMIN))
+               return -EPERM;
+       return single_open(file, mtrr_seq_show, NULL);
+}
+
+static const struct file_operations mtrr_fops = {
+       .owner                  = THIS_MODULE,
+       .open                   = mtrr_open,
+       .read                   = seq_read,
+       .llseek                 = seq_lseek,
+       .write                  = mtrr_write,
+       .unlocked_ioctl         = mtrr_ioctl,
+       .compat_ioctl           = mtrr_ioctl,
+       .release                = mtrr_close,
+};
+
 static int __init mtrr_if_init(void)
 {
        struct cpuinfo_x86 *c = &boot_cpu_data;