58 lines
1.9 KiB
Diff
58 lines
1.9 KiB
Diff
|
From c96f4909ef077ca8a1b8a5db356ed290e6177b5f Mon Sep 17 00:00:00 2001
|
||
|
From: Nickolai Zeldovich <nickolai@csail.mit.edu>
|
||
|
Date: Thu, 7 Mar 2013 08:52:29 +0100
|
||
|
Subject: [PATCH 197/364] * grub-core/commands/acpi.c
|
||
|
(grub_acpi_create_ebda): Don't dereference null pointer. While the
|
||
|
code is technically correct, gcc may eliminate a null check if pointer
|
||
|
is already dereferenced.
|
||
|
|
||
|
---
|
||
|
ChangeLog | 6 ++++++
|
||
|
grub-core/commands/acpi.c | 7 ++++---
|
||
|
2 files changed, 10 insertions(+), 3 deletions(-)
|
||
|
|
||
|
diff --git a/ChangeLog b/ChangeLog
|
||
|
index ca3d603..5fb9b77 100644
|
||
|
--- a/ChangeLog
|
||
|
+++ b/ChangeLog
|
||
|
@@ -1,5 +1,11 @@
|
||
|
2013-03-07 Nickolai Zeldovich <nickolai@csail.mit.edu>
|
||
|
|
||
|
+ * grub-core/commands/acpi.c (grub_acpi_create_ebda): Don't
|
||
|
+ dereference null pointer. While the code is technically correct, gcc
|
||
|
+ may eliminate a null check if pointer is already dereferenced.
|
||
|
+
|
||
|
+2013-03-07 Nickolai Zeldovich <nickolai@csail.mit.edu>
|
||
|
+
|
||
|
* grub-core/normal/crypto.c (read_crypto_list): Fix incorrect
|
||
|
OOM check.
|
||
|
* grub-core/normal/term.c (read_terminal_list): Likewise.
|
||
|
diff --git a/grub-core/commands/acpi.c b/grub-core/commands/acpi.c
|
||
|
index 891e392..8000873 100644
|
||
|
--- a/grub-core/commands/acpi.c
|
||
|
+++ b/grub-core/commands/acpi.c
|
||
|
@@ -171,7 +171,7 @@ grub_acpi_create_ebda (void)
|
||
|
struct grub_acpi_create_ebda_ctx ctx = {
|
||
|
.highestlow = 0
|
||
|
};
|
||
|
- int ebda_kb_len;
|
||
|
+ int ebda_kb_len = 0;
|
||
|
int mmapregion = 0;
|
||
|
grub_uint8_t *ebda, *v1inebda = 0, *v2inebda = 0;
|
||
|
grub_uint8_t *targetebda, *target;
|
||
|
@@ -179,8 +179,9 @@ grub_acpi_create_ebda (void)
|
||
|
struct grub_acpi_rsdp_v20 *v2;
|
||
|
|
||
|
ebda = (grub_uint8_t *) (grub_addr_t) ((*((grub_uint16_t *)0x40e)) << 4);
|
||
|
- ebda_kb_len = *(grub_uint16_t *) ebda;
|
||
|
- if (! ebda || ebda_kb_len > 16)
|
||
|
+ if (ebda)
|
||
|
+ ebda_kb_len = *(grub_uint16_t *) ebda;
|
||
|
+ if (ebda_kb_len > 16)
|
||
|
ebda_kb_len = 0;
|
||
|
ctx.ebda_len = (ebda_kb_len + 1) << 10;
|
||
|
|
||
|
--
|
||
|
1.8.1.4
|
||
|
|