diff options
Diffstat (limited to 'scripts/dtc/libfdt/fdt_sw.c')
| -rw-r--r-- | scripts/dtc/libfdt/fdt_sw.c | 19 | 
1 files changed, 12 insertions, 7 deletions
diff --git a/scripts/dtc/libfdt/fdt_sw.c b/scripts/dtc/libfdt/fdt_sw.c index 76bea22f734f..26759d5dfb8c 100644 --- a/scripts/dtc/libfdt/fdt_sw.c +++ b/scripts/dtc/libfdt/fdt_sw.c @@ -12,10 +12,13 @@  static int fdt_sw_probe_(void *fdt)  { -	if (fdt_magic(fdt) == FDT_MAGIC) -		return -FDT_ERR_BADSTATE; -	else if (fdt_magic(fdt) != FDT_SW_MAGIC) -		return -FDT_ERR_BADMAGIC; +	if (!can_assume(VALID_INPUT)) { +		if (fdt_magic(fdt) == FDT_MAGIC) +			return -FDT_ERR_BADSTATE; +		else if (fdt_magic(fdt) != FDT_SW_MAGIC) +			return -FDT_ERR_BADMAGIC; +	} +  	return 0;  } @@ -38,7 +41,7 @@ static int fdt_sw_probe_memrsv_(void *fdt)  	if (err)  		return err; -	if (fdt_off_dt_strings(fdt) != 0) +	if (!can_assume(VALID_INPUT) && fdt_off_dt_strings(fdt) != 0)  		return -FDT_ERR_BADSTATE;  	return 0;  } @@ -64,7 +67,8 @@ static int fdt_sw_probe_struct_(void *fdt)  	if (err)  		return err; -	if (fdt_off_dt_strings(fdt) != fdt_totalsize(fdt)) +	if (!can_assume(VALID_INPUT) && +	    fdt_off_dt_strings(fdt) != fdt_totalsize(fdt))  		return -FDT_ERR_BADSTATE;  	return 0;  } @@ -151,7 +155,8 @@ int fdt_resize(void *fdt, void *buf, int bufsize)  	headsize = fdt_off_dt_struct(fdt) + fdt_size_dt_struct(fdt);  	tailsize = fdt_size_dt_strings(fdt); -	if ((headsize + tailsize) > fdt_totalsize(fdt)) +	if (!can_assume(VALID_DTB) && +	    headsize + tailsize > fdt_totalsize(fdt))  		return -FDT_ERR_INTERNAL;  	if ((headsize + tailsize) > bufsize)  |