diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2021-03-22 12:20:26 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-03-23 12:13:58 +0100 |
commit | c4460b9d43f6d3d636cf2b374e1591d7e49c85d3 (patch) | |
tree | 1d6e2b6c4e77bb3a134af7e48b4ff389c697b7d9 /common/oftree.c | |
parent | 447306739800a2e3403649f665b0806bca7e5777 (diff) | |
download | barebox-c4460b9d43f6d3d636cf2b374e1591d7e49c85d3.tar.gz barebox-c4460b9d43f6d3d636cf2b374e1591d7e49c85d3.tar.xz |
of: Return copy of live tree as fixed tree
the of fixups modify the the tree passed to them. It is undesired that
these modify the live tree, so when we are requested to return the fixed
live tree then make a copy first.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/oftree.c')
-rw-r--r-- | common/oftree.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/common/oftree.c b/common/oftree.c index 075b9d6b8b..60d4327155 100644 --- a/common/oftree.c +++ b/common/oftree.c @@ -319,21 +319,27 @@ int of_fix_tree(struct device_node *node) struct fdt_header *of_get_fixed_tree(struct device_node *node) { int ret; - struct fdt_header *fdt; + struct fdt_header *fdt = NULL; + struct device_node *freenp = NULL; if (!node) { node = of_get_root_node(); if (!node) return NULL; + + freenp = node = of_copy_node(NULL, node); + if (!node) + return NULL; } ret = of_fix_tree(node); if (ret) - return NULL; + goto out; fdt = of_flatten_dtb(node); - if (!fdt) - return NULL; + +out: + of_delete_node(freenp); return fdt; } |