Message ID | 20191022190428.14868-1-heiko@sntech.de |
---|---|
State | Superseded |
Delegated to: | Simon Glass |
Headers | show |
Series | [U-Boot,v2,1/4] fdtdec: protect against another NULL phandlep in fdtdec_add_reserved_memory() | expand |
On Tue, 22 Oct 2019 at 13:04, Heiko Stuebner <heiko@sntech.de> wrote: > > From: Heiko Stuebner <heiko.stuebner@theobroma-systems.com> > > The change adding fdtdec_add_reserved_memory() already protected the added > phandle against the phandlep being NULL - making the phandlep var optional. > > But in the early code checking for an already existing carveout this check > was not done and thus the phandle assignment could run into trouble, > so add a check there as well, which makes the function still return > successfully if a matching region is found, even though no-one wants to > work with the phandle. > > Fixes: c9222a08b3f7 ("fdtdec: Implement fdtdec_add_reserved_memory()") > Signed-off-by: Heiko Stuebner <heiko.stuebner@theobroma-systems.com> > --- > changes in v2: > - add comment about phandlep allowed to be NULL > > include/fdtdec.h | 1 + > lib/fdtdec.c | 3 ++- > 2 files changed, 3 insertions(+), 1 deletion(-) Reviewed-by: Simon Glass <sjg@chromium.org>
diff --git a/include/fdtdec.h b/include/fdtdec.h index 635f53083b..54509a25ad 100644 --- a/include/fdtdec.h +++ b/include/fdtdec.h @@ -1078,6 +1078,7 @@ static inline int fdtdec_set_phandle(void *blob, int node, uint32_t phandle) * @param basename base name of the node to create * @param carveout information about the carveout region * @param phandlep return location for the phandle of the carveout region + * can be NULL * @return 0 on success or a negative error code on failure */ int fdtdec_add_reserved_memory(void *blob, const char *basename, diff --git a/lib/fdtdec.c b/lib/fdtdec.c index 74430c8b2f..d7c3684145 100644 --- a/lib/fdtdec.c +++ b/lib/fdtdec.c @@ -1363,7 +1363,8 @@ int fdtdec_add_reserved_memory(void *blob, const char *basename, } if (addr == carveout->start && (addr + size) == carveout->end) { - *phandlep = fdt_get_phandle(blob, node); + if (phandlep) + *phandlep = fdt_get_phandle(blob, node); return 0; } }