diff options
-rw-r--r-- | arch/x86/include/asm/bootparam_utils.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/arch/x86/include/asm/bootparam_utils.h b/arch/x86/include/asm/bootparam_utils.h index ff808ef4fdb4..653668d140f9 100644 --- a/arch/x86/include/asm/bootparam_utils.h +++ b/arch/x86/include/asm/bootparam_utils.h | |||
@@ -19,8 +19,22 @@ | |||
19 | */ | 19 | */ |
20 | static void sanitize_boot_params(struct boot_params *boot_params) | 20 | static void sanitize_boot_params(struct boot_params *boot_params) |
21 | { | 21 | { |
22 | /* | ||
23 | * IMPORTANT NOTE TO BOOTLOADER AUTHORS: do not simply clear | ||
24 | * this field. The purpose of this field is to guarantee | ||
25 | * compliance with the x86 boot spec located in | ||
26 | * Documentation/x86/boot.txt . That spec says that the | ||
27 | * *whole* structure should be cleared, after which only the | ||
28 | * portion defined by struct setup_header (boot_params->hdr) | ||
29 | * should be copied in. | ||
30 | * | ||
31 | * If you're having an issue because the sentinel is set, you | ||
32 | * need to change the whole structure to be cleared, not this | ||
33 | * (or any other) individual field, or you will soon have | ||
34 | * problems again. | ||
35 | */ | ||
22 | if (boot_params->sentinel) { | 36 | if (boot_params->sentinel) { |
23 | /*fields in boot_params are not valid, clear them */ | 37 | /* fields in boot_params are left uninitialized, clear them */ |
24 | memset(&boot_params->olpc_ofw_header, 0, | 38 | memset(&boot_params->olpc_ofw_header, 0, |
25 | (char *)&boot_params->efi_info - | 39 | (char *)&boot_params->efi_info - |
26 | (char *)&boot_params->olpc_ofw_header); | 40 | (char *)&boot_params->olpc_ofw_header); |