summaryrefslogtreecommitdiffstats
path: root/cpukit/dtc/libfdt/fdt.c
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2018-03-16 22:40:26 +1100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-07-19 07:01:12 +0200
commit9a7de8e2d05aade58020f10d48a69db4111ee5ac (patch)
tree03f6ba8214fbecbd1ffb942d7a1a7b3f06e18ebf /cpukit/dtc/libfdt/fdt.c
parentlibfdt: Safer access to memory reservations (diff)
downloadrtems-9a7de8e2d05aade58020f10d48a69db4111ee5ac.tar.bz2
libfdt: Add fdt_header_size()
We have a couple of places within libfdt and its tests where we need to find the size of the header, based on the version. Add a helper function for it. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Simon Glass <sjg@chromium.org> Tested-by: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Diffstat (limited to 'cpukit/dtc/libfdt/fdt.c')
-rw-r--r--cpukit/dtc/libfdt/fdt.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/cpukit/dtc/libfdt/fdt.c b/cpukit/dtc/libfdt/fdt.c
index 5f1e57a5bd..ae03b11129 100644
--- a/cpukit/dtc/libfdt/fdt.c
+++ b/cpukit/dtc/libfdt/fdt.c
@@ -96,21 +96,33 @@ static int check_block_(uint32_t hdrsize, uint32_t totalsize,
return 1;
}
+size_t fdt_header_size_(uint32_t version)
+{
+ if (version <= 1)
+ return FDT_V1_SIZE;
+ else if (version <= 2)
+ return FDT_V2_SIZE;
+ else if (version <= 3)
+ return FDT_V3_SIZE;
+ else if (version <= 16)
+ return FDT_V16_SIZE;
+ else
+ return FDT_V17_SIZE;
+}
+
int fdt_check_header(const void *fdt)
{
- size_t hdrsize = FDT_V16_SIZE;
+ size_t hdrsize;
if (fdt_magic(fdt) != FDT_MAGIC)
return -FDT_ERR_BADMAGIC;
+ hdrsize = fdt_header_size(fdt);
if ((fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION)
|| (fdt_last_comp_version(fdt) > FDT_LAST_SUPPORTED_VERSION))
return -FDT_ERR_BADVERSION;
if (fdt_version(fdt) < fdt_last_comp_version(fdt))
return -FDT_ERR_BADVERSION;
- if (fdt_version(fdt) >= 17)
- hdrsize = FDT_V17_SIZE;
-
if ((fdt_totalsize(fdt) < hdrsize)
|| (fdt_totalsize(fdt) > INT_MAX))
return -FDT_ERR_TRUNCATED;