diff --git a/components/drivers/fdt/libfdt/fdt_rw.c b/components/drivers/fdt/libfdt/fdt_rw.c index 74954c2f288c0060bcf2c45344a0b27d3edd5044..58827ef898e29a6899dee0dce742162a2856ad55 100644 --- a/components/drivers/fdt/libfdt/fdt_rw.c +++ b/components/drivers/fdt/libfdt/fdt_rw.c @@ -96,7 +96,9 @@ static int _fdt_splice(void *fdt, void *splicepoint, int oldlen, int newlen) { char *p = splicepoint; char *end = (char *)fdt + _fdt_data_size(fdt); - + + if (oldlen <= 0) + return -FDT_ERR_BADOFFSET; if (((p + oldlen) < p) || ((p + oldlen) > end)) return -FDT_ERR_BADOFFSET; if ((p < (char *)fdt) || ((end - oldlen + newlen) < (char *)fdt))