linux/arch
Borislav Petkov c9fc3f778a x86, microcode: Sanitize per-cpu microcode reloading interface
Microcode reloading in a per-core manner is a very bad idea for both
major x86 vendors. And the thing is, we have such interface with which
we can end up with different microcode versions applied on different
cores of an otherwise homogeneous wrt (family,model,stepping) system.

So turn off the possibility of doing that per core and allow it only
system-wide.

This is a minimal fix which we'd like to see in stable too thus the
more-or-less arbitrary decision to allow system-wide reloading only on
the BSP:

$ echo 1 > /sys/devices/system/cpu/cpu0/microcode/reload
...

and disable the interface on the other cores:

$ echo 1 > /sys/devices/system/cpu/cpu23/microcode/reload
-bash: echo: write error: Invalid argument

Also, allowing the reload only from one CPU (the BSP in
that case) doesn't allow the reload procedure to degenerate
into an O(n^2) deal when triggering reloads from all
/sys/devices/system/cpu/cpuX/microcode/reload sysfs nodes
simultaneously.

A more generic fix will follow.

Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: Borislav Petkov <borislav.petkov@amd.com>
Link: http://lkml.kernel.org/r/1340280437-7718-2-git-send-email-bp@amd64.org
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Cc: <stable@vger.kernel.org>
2012-07-01 10:24:05 -07:00
..
alpha Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2012-06-01 11:53:44 -07:00
arm ARM: SoC fixes 2012-06-30 16:01:50 -07:00
avr32 fixups for signal breakage 2012-06-04 17:47:34 -04:00
blackfin Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2012-06-05 09:47:15 -07:00
c6x new helper: signal_delivered() 2012-06-01 12:58:52 -04:00
cris Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2012-06-01 11:53:44 -07:00
frv frv: Remove bogus closing parenthesis 2012-06-02 10:38:19 -04:00
h8300 h8300: use the declarations provided by <asm/sections.h> 2012-06-20 14:39:35 -07:00
hexagon new helper: signal_delivered() 2012-06-01 12:58:52 -04:00
ia64 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2012-06-01 11:53:44 -07:00
m32r Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2012-06-01 11:53:44 -07:00
m68k m68knommu: define a local devm_clk_get() function 2012-06-25 09:17:20 +10:00
microblaze new helper: signal_delivered() 2012-06-01 12:58:52 -04:00
mips - More robust parsing especially of xattr data in JFFS2 2012-06-01 16:55:42 -07:00
mn10300 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2012-06-01 11:53:44 -07:00
openrisc new helper: signal_delivered() 2012-06-01 12:58:52 -04:00
parisc [PARISC] fix code to find libgcc 2012-06-05 14:10:23 +09:00
powerpc powerpc/pseries: Fix software invalidate TCE 2012-06-29 14:35:37 +10:00
s390 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2012-06-01 11:53:44 -07:00
score new helper: signal_delivered() 2012-06-01 12:58:52 -04:00
sh Merge branches 'sh/urgent' and 'sh/trivial' into sh-fixes-for-linus 2012-06-28 16:46:13 +09:00
sparc Fix typo in printed messages 2012-06-24 11:03:52 -07:00
tile tile: fix bug in get_user() for 4-byte values 2012-06-16 16:56:13 -04:00
um new helper: signal_delivered() 2012-06-01 12:58:52 -04:00
unicore32 new helper: signal_delivered() 2012-06-01 12:58:52 -04:00
x86 x86, microcode: Sanitize per-cpu microcode reloading interface 2012-07-01 10:24:05 -07:00
xtensa xtensa: use the declarations provided by <asm/sections.h> 2012-06-20 14:39:35 -07:00
.gitignore
Kconfig Merge branch 'for-linus' of git://git.linaro.org/people/mszyprowski/linux-dma-mapping 2012-05-25 09:18:59 -07:00