[U-Boot] [PATCH 2/4] fdt: Add Kconfig options to control code size
Heinrich Schuchardt
xypron.glpk at gmx.de
Sun Oct 27 18:06:38 UTC 2019
On 10/27/19 4:47 PM, Simon Glass wrote:
> For better or worse libfdt recent grew a lot of code that checks the
> validity of the device tree in great detail. When using unsigned or
> unverified data this makes things safer, but it does add to code size.
>
> Add some controls to select the trade-off between safety and code size.
>
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
>
> lib/Kconfig | 33 +++++++++++++++++++++++++++++++++
> lib/libfdt/Makefile | 3 ++-
> 2 files changed, 35 insertions(+), 1 deletion(-)
>
> diff --git a/lib/Kconfig b/lib/Kconfig
> index 135f0b372b..b8a8509d72 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -464,6 +464,17 @@ config OF_LIBFDT
> particular compatible nodes. The library operates on a flattened
> version of the device tree.
>
> +config OF_LIBFDT_ASSUME_MASK
> + hex "Mask of conditions to assume for libfdt"
> + depends on OF_LIBFDT || FIT
> + default 0
> + help
> + Use this to change the assumptions made by libfdt about the
> + device tree it is working with. A value of 0 means that no assumptions
> + are made, and libfdt is able to deal with malicious data. A value of
What do you mean by malicious here?
The checks in libfdt are about inconsistent FDT files. But they would
not discover malicious settings like a destructive voltage or frequency.
Would FDT_ASSUME_SANE match what we have been checking up to now? Why
not use 1 as the default here to reduce the code size of U-Boot?
> + 0xff means all assumptions are made and any invalid data may cause
> + unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
> +
> config OF_LIBFDT_OVERLAY
> bool "Enable the FDT library overlay support"
> depends on OF_LIBFDT
> @@ -481,6 +492,17 @@ config SPL_OF_LIBFDT
> particular compatible nodes. The library operates on a flattened
> version of the device tree.
>
> +config SPL_OF_LIBFDT_ASSUME_MASK
> + hex "Mask of conditions to assume for libfdt"
> + depends on SPL_OF_LIBFDT || FIT
> + default 0xff
On some devices the device tree is provided by the device (e.g. QEMU).
Is it wise to set FDT_ASSUME_LATEST in this case?
Best regards
Heinrich
> + help
> + Use this to change the assumptions made by libfdt in SPL about the
> + device tree it is working with. A value of 0 means that no assumptions
> + are made, and libfdt is able to deal with malicious data. A value of
> + 0xff means all assumptions are made and any invalid data may cause
> + unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
> +
> config TPL_OF_LIBFDT
> bool "Enable the FDT library for TPL"
> default y if TPL_OF_CONTROL
> @@ -491,6 +513,17 @@ config TPL_OF_LIBFDT
> particular compatible nodes. The library operates on a flattened
> version of the device tree.
>
> +config TPL_OF_LIBFDT_ASSUME_MASK
> + hex "Mask of conditions to assume for libfdt"
> + depends on TPL_OF_LIBFDT || FIT
> + default 0xff
> + help
> + Use this to change the assumptions made by libfdt in TPL about the
> + device tree it is working with. A value of 0 means that no assumptions
> + are made, and libfdt is able to deal with malicious data. A value of
> + 0xff means all assumptions are made and any invalid data may cause
> + unsafe execution. See FDT_ASSUME_PERFECT, etc. in libfdt_internal.h
> +
> config FDT_FIXUP_PARTITIONS
> bool "overwrite MTD partitions in DTS through defined in 'mtdparts'"
> depends on OF_LIBFDT
> diff --git a/lib/libfdt/Makefile b/lib/libfdt/Makefile
> index ef5b6e29d4..5d3ae4e2f1 100644
> --- a/lib/libfdt/Makefile
> +++ b/lib/libfdt/Makefile
> @@ -22,4 +22,5 @@ obj-y += fdt_ro.o
> # U-Boot own file
> obj-y += fdt_region.o
>
> -ccflags-y := -I$(srctree)/scripts/dtc/libfdt
> +ccflags-y := -I$(srctree)/scripts/dtc/libfdt \
> + -DFDT_ASSUME_MASK=$(CONFIG_$(SPL_TPL_)OF_LIBFDT_ASSUME_MASK)
>
More information about the U-Boot
mailing list