mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-21 14:59:34 +00:00
multiboot: Simplify to avoid confusing assignment.
Found by: Coverity scan.
This commit is contained in:
1 parent
1e0d718371
commit
ef02b4ca93
2 files changed
+39
-22
No files matched your search
@@ -121,6 +121,24 @@ load_kernel (grub_file_t file, const char *filename,
|
|||||||
return grub_multiboot_load_elf (file, filename, buffer);
|
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_err_t
|
||||||
grub_multiboot_load (grub_file_t file, const char *filename)
|
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;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Look for the multiboot header in the buffer. The header should
|
header = find_header (buffer, len);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (header == 0)
|
if (header == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -79,6 +79,25 @@ grub_multiboot_add_elfsyms (grub_size_t num, grub_size_t entsize,
|
|||||||
elf_sections = data;
|
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_err_t
|
||||||
grub_multiboot_load (grub_file_t file, const char *filename)
|
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);
|
COMPILE_TIME_ASSERT (MULTIBOOT_HEADER_ALIGN % 4 == 0);
|
||||||
|
|
||||||
/* Look for the multiboot header in the buffer. The header should
|
header = find_header (buffer, len);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (header == 0)
|
if (header == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in new issue
Block a user