[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1482933340-11857-1-git-send-email-lukasz.odzioba@intel.com>
Date: Wed, 28 Dec 2016 14:55:40 +0100
From: Lukasz Odzioba <lukasz.odzioba@...el.com>
To: linux-kernel@...r.kernel.org, tglx@...utronix.de, mingo@...hat.com,
hpa@...or.com, x86@...nel.org, bp@...en8.de, luto@...nel.org,
slaoub@...il.com, bp@...e.de, dave.hansen@...ux.intel.com,
andi.kleen@...el.com
Cc: Lukasz Odzioba <lukasz.odzioba@...el.com>
Subject: [PATCH 1/1] x86: sanitize argument of clearcpuid command-line option
A negative number can be specified in the cmdline which will be used as
setup_clear_cpu_cap() argument. With that we can clear/set some bit in
memory predceeding boot_cpu_data/cpu_caps_cleared which may cause kernel
to misbehave. This patch adds lower bound check to setup_disablecpuid().
Fixes: ac72e7888a61 ("x86: add generic clearcpuid=... option")
Signed-off-by: Lukasz Odzioba <lukasz.odzioba@...el.com>
---
As an example let's change definition of one_hundred variable:
ffffffff81c4eeec d one_hundred
ffffffff81d69720 D boot_cpu_data (0x14 is x86_capability offset)
8*(0xffffffff81d69734-0xffffffff81c4eeec) => 9257536 -2 because we
want to clear the second bit. With clearcpuid=-9257534 we change the
definition of one_hundread to 96 which is used among other things
as sysfs' max value for swappiness, so we can check the effect like so:
# echo 96 > /proc/sys/vm/swappiness
# echo 97 > /proc/sys/vm/swappiness
-bash: echo: write error: Invalid argument
---
arch/x86/kernel/cpu/common.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index dc1697c..9bab7a8 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -1221,7 +1221,7 @@ static __init int setup_disablecpuid(char *arg)
{
int bit;
- if (get_option(&arg, &bit) && bit < NCAPINTS*32)
+ if (get_option(&arg, &bit) && bit >= 0 && bit < NCAPINTS * 32)
setup_clear_cpu_cap(bit);
else
return 0;
--
1.8.3.1
Powered by blists - more mailing lists