Skip to content

Commit 10dc543

Browse files
rizlikdanielinux
authored andcommitted
multiboot.c: fix unsafe cast to uint32_t* from uint8_t*
note that this is not a problem on x86_64 architecture.
1 parent c073f8c commit 10dc543

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

@@ -360,18 +361,19 @@ static void mb2_dump_header(void* mbHeader) {
360361

361362
uint8_t *mb2_find_header(uint8_t *image, int size)
362363
{
363-
uint32_t *ptr;
364+
uint32_t val;
364365
int i;
365366

366367
if (size > MB2_HEADER_MAX_OFF)
367368
size = MB2_HEADER_MAX_OFF;
368369
size = size / 4;
369-
for (ptr = (uint32_t*)image,i = 0; i < size; ++i) {
370-
if (ptr[i] == MB2_HEADER_MAGIC) {
370+
for (i = 0; i < size; ++i) {
371+
memcpy(&val, image + i * 4, sizeof(val));
372+
if (val == MB2_HEADER_MAGIC) {
371373
#ifdef DEBUG_MB2
372-
mb2_dump_header(&ptr[i]);
374+
mb2_dump_header(image + i * 4);
373375
#endif /* DEBUG_MB2 */
374-
return (uint8_t*)&ptr[i];
376+
return image + i * 4;
375377
}
376378
}
377379
return NULL;

0 commit comments

Comments
 (0)