Merge remote-tracking branch origin/win.coretech.1.0 into HEAD

Change-Id: Ideb195d3ecede2876c64a52dc1713f04647acfba
This commit is contained in:
Linux Build Service Account 2021-09-20 11:52:39 +05:30
commit fea2fde8f1

View file

@ -18,6 +18,9 @@
int fdt_check_header(const void *fdt)
{
uintptr_t fdt_start, fdt_end;
fdt_start = (uintptr_t)fdt;
if (fdt_magic(fdt) == FDT_MAGIC) {
/* Complete tree */
if (fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION)
@ -32,16 +35,22 @@ int fdt_check_header(const void *fdt)
return -FDT_ERR_BADMAGIC;
}
if (fdt_off_dt_struct(fdt) > (UINT_MAX - fdt_size_dt_struct(fdt)))
if(fdt_start + fdt_totalsize(fdt) < fdt_start)
{
return FDT_ERR_BADOFFSET;
}
fdt_end = fdt_start + fdt_totalsize(fdt);
if (((uint64_t)fdt_start + (uint64_t)fdt_off_dt_struct(fdt) + (uint64_t)fdt_size_dt_struct(fdt)) > UINT_MAX)
return FDT_ERR_BADOFFSET;
if (fdt_off_dt_strings(fdt) > (UINT_MAX - fdt_size_dt_strings(fdt)))
if ((fdt_start + fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt)) > fdt_end)
return FDT_ERR_BADOFFSET;
if ((fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt)) > fdt_totalsize(fdt))
if (((uint64_t)fdt_start + (uint64_t)fdt_off_dt_strings(fdt) + (uint64_t)fdt_size_dt_strings(fdt)) > UINT_MAX)
return FDT_ERR_BADOFFSET;
if ((fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt)) > fdt_totalsize(fdt))
if ((fdt_start + fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt)) > fdt_end)
return FDT_ERR_BADOFFSET;
return 0;