diff options
author | Jeremy Fitzhardinge <jeremy@goop.org> | 2008-09-07 04:51:32 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-09-07 11:39:59 -0400 |
commit | 5394f80f92642c61fc2a95385be85f2fdcfb5adb (patch) | |
tree | 313dd51430cf7ff7f7161019bb3d3bf89320357c /include | |
parent | 7686ad5606f08d9dfb33a2087a36c8366366015b (diff) |
x86: check for and defend against BIOS memory corruption
Some BIOSes have been observed to corrupt memory in the low 64k. This
change:
- Reserves all memory which does not have to be in that area, to
prevent it from being used as general memory by the kernel. Things
like the SMP trampoline are still in the memory, however.
- Clears the reserved memory so we can observe changes to it.
- Adds a function check_for_bios_corruption() which checks and reports on
memory becoming unexpectedly non-zero. Currently it's called in the
x86 fault handler, and the powermanagement debug output.
Signed-off-by: Jeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/kernel.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 2651f805ba6d..8017129e6b63 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
@@ -240,6 +240,18 @@ extern const char *print_tainted(void); | |||
240 | extern void add_taint(unsigned); | 240 | extern void add_taint(unsigned); |
241 | extern int root_mountflags; | 241 | extern int root_mountflags; |
242 | 242 | ||
243 | #ifdef CONFIG_X86_CHECK_BIOS_CORRUPTION | ||
244 | /* | ||
245 | * This is obviously not a great place for this, but we want to be | ||
246 | * able to scatter it around anywhere in the kernel. | ||
247 | */ | ||
248 | void check_for_bios_corruption(void); | ||
249 | #else | ||
250 | static inline void check_for_bios_corruption(void) | ||
251 | { | ||
252 | } | ||
253 | #endif | ||
254 | |||
243 | /* Values used for system_state */ | 255 | /* Values used for system_state */ |
244 | extern enum system_states { | 256 | extern enum system_states { |
245 | SYSTEM_BOOTING, | 257 | SYSTEM_BOOTING, |