47 lines
1.7 KiB
Diff
47 lines
1.7 KiB
Diff
From: Matthew Garrett <matthew.garrett@nebula.com>
|
|
Date: Wed, 8 Nov 2017 15:11:34 +0000
|
|
Subject: [12/29] x86: Lock down IO port access when the kernel is locked down
|
|
Origin: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/commit?id=00ebba940247d4c37c06da4aedecf6b80db213cf
|
|
|
|
IO port access would permit users to gain access to PCI configuration
|
|
registers, which in turn (on a lot of hardware) give access to MMIO
|
|
register space. This would potentially permit root to trigger arbitrary
|
|
DMA, so lock it down by default.
|
|
|
|
This also implicitly locks down the KDADDIO, KDDELIO, KDENABIO and
|
|
KDDISABIO console ioctls.
|
|
|
|
Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com>
|
|
Signed-off-by: David Howells <dhowells@redhat.com>
|
|
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
|
|
Reviewed-by: "Lee, Chun-Yi" <jlee@suse.com>
|
|
cc: x86@kernel.org
|
|
---
|
|
arch/x86/kernel/ioport.c | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/arch/x86/kernel/ioport.c b/arch/x86/kernel/ioport.c
|
|
index 9c3cf0944bce..2c0f058651c5 100644
|
|
--- a/arch/x86/kernel/ioport.c
|
|
+++ b/arch/x86/kernel/ioport.c
|
|
@@ -30,7 +30,8 @@ asmlinkage long sys_ioperm(unsigned long from, unsigned long num, int turn_on)
|
|
|
|
if ((from + num <= from) || (from + num > IO_BITMAP_BITS))
|
|
return -EINVAL;
|
|
- if (turn_on && !capable(CAP_SYS_RAWIO))
|
|
+ if (turn_on && (!capable(CAP_SYS_RAWIO) ||
|
|
+ kernel_is_locked_down("ioperm")))
|
|
return -EPERM;
|
|
|
|
/*
|
|
@@ -120,7 +121,8 @@ SYSCALL_DEFINE1(iopl, unsigned int, level)
|
|
return -EINVAL;
|
|
/* Trying to gain more privileges? */
|
|
if (level > old) {
|
|
- if (!capable(CAP_SYS_RAWIO))
|
|
+ if (!capable(CAP_SYS_RAWIO) ||
|
|
+ kernel_is_locked_down("iopl"))
|
|
return -EPERM;
|
|
}
|
|
regs->flags = (regs->flags & ~X86_EFLAGS_IOPL) |
|