aboutsummaryrefslogtreecommitdiff
path: root/src/lib/fmap.c
diff options
context:
space:
mode:
authorKrystian Hebel <krystian.hebel@3mdeb.com>2020-09-30 18:23:14 +0200
committerPatrick Georgi <pgeorgi@google.com>2021-10-27 14:55:51 +0000
commit93f6b8a8cc7b7cd8580b0d0bc76d7b676bef739e (patch)
treef1958d658f10c59b927eba167149068e2f0f70e3 /src/lib/fmap.c
parent2f105ed9ab9b1b3e1dfce1e637443c782e437ce5 (diff)
src/lib/fmap.c: use le*toh() functions where needed
FMAP was developed with assumption about endianness of the target machine. This broke the parsing of the structure on big endian architectures. This patch converts the endianness of the fields where applicable. Signed-off-by: Krystian Hebel <krystian.hebel@3mdeb.com> Change-Id: I8784ac29101531db757249496315f43e4008de4f Reviewed-on: https://review.coreboot.org/c/coreboot/+/55038 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'src/lib/fmap.c')
-rw-r--r--src/lib/fmap.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/lib/fmap.c b/src/lib/fmap.c
index 254d7877f6..6ff8431b04 100644
--- a/src/lib/fmap.c
+++ b/src/lib/fmap.c
@@ -8,6 +8,7 @@
#include <stddef.h>
#include <string.h>
#include <symbols.h>
+#include <endian.h>
#include "fmap_config.h"
@@ -49,7 +50,8 @@ static void report(const struct fmap *fmap)
print_once(BIOS_DEBUG, "FMAP: Found \"%s\" version %d.%d at %#x.\n",
fmap->name, fmap->ver_major, fmap->ver_minor, FMAP_OFFSET);
print_once(BIOS_DEBUG, "FMAP: base = %#llx size = %#x #areas = %d\n",
- (long long)fmap->base, fmap->size, fmap->nareas);
+ (long long)le64toh(fmap->base), le32toh(fmap->size),
+ le16toh(fmap->nareas));
fmap_print_once = 1;
}
@@ -188,10 +190,10 @@ int fmap_locate_area(const char *name, struct region *ar)
}
printk(BIOS_DEBUG, "FMAP: area %s found @ %x (%d bytes)\n",
- name, area->offset, area->size);
+ name, le32toh(area->offset), le32toh(area->size));
- ar->offset = area->offset;
- ar->size = area->size;
+ ar->offset = le32toh(area->offset);
+ ar->size = le32toh(area->size);
rdev_munmap(&fmrd, area);
@@ -226,8 +228,8 @@ int fmap_find_region_name(const struct region * const ar,
if (area == NULL)
return -1;
- if ((ar->offset != area->offset) ||
- (ar->size != area->size)) {
+ if ((ar->offset != le32toh(area->offset)) ||
+ (ar->size != le32toh(area->size))) {
rdev_munmap(&fmrd, area);
offset += sizeof(struct fmap_area);
continue;