8c6b1ac71e
Also include some minor fixes for gcc 5.1.1 Signed-off-by: Peter Jones <pjones@redhat.com>
112 lines
4.0 KiB
Diff
112 lines
4.0 KiB
Diff
From ef02b4ca933fd4c215e169a23b2b069aab712677 Mon Sep 17 00:00:00 2001
|
|
From: Vladimir Serbinenko <phcoder@gmail.com>
|
|
Date: Mon, 26 Jan 2015 09:43:52 +0100
|
|
Subject: [PATCH 227/506] multiboot: Simplify to avoid confusing assignment.
|
|
|
|
Found by: Coverity scan.
|
|
---
|
|
grub-core/loader/i386/multiboot_mbi.c | 29 +++++++++++++++++++----------
|
|
grub-core/loader/multiboot_mbi2.c | 32 ++++++++++++++++++++------------
|
|
2 files changed, 39 insertions(+), 22 deletions(-)
|
|
|
|
diff --git a/grub-core/loader/i386/multiboot_mbi.c b/grub-core/loader/i386/multiboot_mbi.c
|
|
index f10c087..956d0e3 100644
|
|
--- a/grub-core/loader/i386/multiboot_mbi.c
|
|
+++ b/grub-core/loader/i386/multiboot_mbi.c
|
|
@@ -121,6 +121,24 @@ load_kernel (grub_file_t file, const char *filename,
|
|
return grub_multiboot_load_elf (file, filename, buffer);
|
|
}
|
|
|
|
+static struct multiboot_header *
|
|
+find_header (char *buffer, grub_ssize_t len)
|
|
+{
|
|
+ struct multiboot_header *header;
|
|
+
|
|
+ /* Look for the multiboot header in the buffer. The header should
|
|
+ be at least 12 bytes and aligned on a 4-byte boundary. */
|
|
+ for (header = (struct multiboot_header *) buffer;
|
|
+ ((char *) header <= buffer + len - 12);
|
|
+ header = (struct multiboot_header *) ((char *) header + MULTIBOOT_HEADER_ALIGN))
|
|
+ {
|
|
+ if (header->magic == MULTIBOOT_HEADER_MAGIC
|
|
+ && !(header->magic + header->flags + header->checksum))
|
|
+ return header;
|
|
+ }
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
grub_err_t
|
|
grub_multiboot_load (grub_file_t file, const char *filename)
|
|
{
|
|
@@ -143,16 +161,7 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
|
return grub_errno;
|
|
}
|
|
|
|
- /* Look for the multiboot header in the buffer. The header should
|
|
- be at least 12 bytes and aligned on a 4-byte boundary. */
|
|
- for (header = (struct multiboot_header *) buffer;
|
|
- ((char *) header <= buffer + len - 12) || (header = 0);
|
|
- header = (struct multiboot_header *) ((char *) header + MULTIBOOT_HEADER_ALIGN))
|
|
- {
|
|
- if (header->magic == MULTIBOOT_HEADER_MAGIC
|
|
- && !(header->magic + header->flags + header->checksum))
|
|
- break;
|
|
- }
|
|
+ header = find_header (buffer, len);
|
|
|
|
if (header == 0)
|
|
{
|
|
diff --git a/grub-core/loader/multiboot_mbi2.c b/grub-core/loader/multiboot_mbi2.c
|
|
index 83e8919..6f74aee 100644
|
|
--- a/grub-core/loader/multiboot_mbi2.c
|
|
+++ b/grub-core/loader/multiboot_mbi2.c
|
|
@@ -79,6 +79,25 @@ grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize,
|
|
elf_sections = data;
|
|
}
|
|
|
|
+static struct multiboot_header *
|
|
+find_header (grub_properly_aligned_t *buffer, grub_ssize_t len)
|
|
+{
|
|
+ struct multiboot_header *header;
|
|
+ /* Look for the multiboot header in the buffer. The header should
|
|
+ be at least 12 bytes and aligned on a 4-byte boundary. */
|
|
+ for (header = (struct multiboot_header *) buffer;
|
|
+ ((char *) header <= (char *) buffer + len - 12);
|
|
+ header = (struct multiboot_header *) ((grub_uint32_t *) header + MULTIBOOT_HEADER_ALIGN / 4))
|
|
+ {
|
|
+ if (header->magic == MULTIBOOT_HEADER_MAGIC
|
|
+ && !(header->magic + header->architecture
|
|
+ + header->header_length + header->checksum)
|
|
+ && header->architecture == MULTIBOOT_ARCHITECTURE_CURRENT)
|
|
+ return header;
|
|
+ }
|
|
+ return NULL;
|
|
+}
|
|
+
|
|
grub_err_t
|
|
grub_multiboot_load (grub_file_t file, const char *filename)
|
|
{
|
|
@@ -107,18 +126,7 @@ grub_multiboot_load (grub_file_t file, const char *filename)
|
|
|
|
COMPILE_TIME_ASSERT (MULTIBOOT_HEADER_ALIGN % 4 == 0);
|
|
|
|
- /* Look for the multiboot header in the buffer. The header should
|
|
- be at least 12 bytes and aligned on a 4-byte boundary. */
|
|
- for (header = (struct multiboot_header *) buffer;
|
|
- ((char *) header <= (char *) buffer + len - 12) || (header = 0);
|
|
- header = (struct multiboot_header *) ((grub_uint32_t *) header + MULTIBOOT_HEADER_ALIGN / 4))
|
|
- {
|
|
- if (header->magic == MULTIBOOT_HEADER_MAGIC
|
|
- && !(header->magic + header->architecture
|
|
- + header->header_length + header->checksum)
|
|
- && header->architecture == MULTIBOOT_ARCHITECTURE_CURRENT)
|
|
- break;
|
|
- }
|
|
+ header = find_header (buffer, len);
|
|
|
|
if (header == 0)
|
|
{
|
|
--
|
|
2.4.3
|
|
|