Skip to content

Commit 2d926cd

Browse files
committed
multiboot.c: fix unsafe cast to uint32_t* from uint8_t*
note that this is not a problem on x86_64 architecture.
1 parent 3071d7b commit 2d926cd

1 file changed

Lines changed: 7 additions & 5 deletions

File tree

src/multiboot.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#include <stdint.h>
2525
#include <stdio.h>
26+
#include <string.h>
2627
#include <printf.h>
2728
#include <sys/types.h>
2829

@@ -352,18 +353,19 @@ static void mb2_dump_header(void* mbHeader) {
352353

353354
uint8_t *mb2_find_header(uint8_t *image, int size)
354355
{
355-
uint32_t *ptr;
356+
uint32_t val;
356357
int i;
357358

358359
if (size > MB2_HEADER_MAX_OFF)
359360
size = MB2_HEADER_MAX_OFF;
360361
size = size / 4;
361-
for (ptr = (uint32_t*)image,i = 0; i < size; ++i) {
362-
if (ptr[i] == MB2_HEADER_MAGIC) {
362+
for (i = 0; i < size; ++i) {
363+
memcpy(&val, image + i * 4, sizeof(val));
364+
if (val == MB2_HEADER_MAGIC) {
363365
#ifdef DEBUG_MB2
364-
mb2_dump_header(&ptr[i]);
366+
mb2_dump_header(image + i * 4);
365367
#endif /* DEBUG_MB2 */
366-
return (uint8_t*)&ptr[i];
368+
return image + i * 4;
367369
}
368370
}
369371
return NULL;

0 commit comments

Comments
 (0)