[openwrt/openwrt] generic: use only first element in bootconf for uImage.FIT

LEDE Commits lede-commits at lists.infradead.org
Fri Jun 9 11:23:59 PDT 2023


dangole pushed a commit to openwrt/openwrt.git, branch openwrt-23.05:
https://git.openwrt.org/dc778190bc9ce68dc57ec54e730b797c63666d56

commit dc778190bc9ce68dc57ec54e730b797c63666d56
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Sun Jun 4 18:21:29 2023 +0100

    generic: use only first element in bootconf for uImage.FIT
    
    Now that it is possible to load several device tree overlays by
    appending their config names to bootconf the uImage.FIT partition
    parser need to discard everything after the first '#' character in
    bootconf when looking up the config node to be used.
    
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
    (cherry picked from commit 07bca1adaa0de71d0aefcf83bff2e1d90616cd3d)
---
 target/linux/generic/files/block/partitions/fit.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/target/linux/generic/files/block/partitions/fit.c b/target/linux/generic/files/block/partitions/fit.c
index 13c03743f3..91b25e0581 100644
--- a/target/linux/generic/files/block/partitions/fit.c
+++ b/target/linux/generic/files/block/partitions/fit.c
@@ -84,13 +84,13 @@ int parse_fit_partitions(struct parsed_partitions *state, u64 fit_start_sector,
 	const u32 *image_offset_be, *image_len_be, *image_pos_be;
 	int ret = 1, node, images, config;
 	const char *image_name, *image_type, *image_description, *config_default,
-		*config_description, *config_loadables;
+		*config_description, *config_loadables, *bootconf_c;
 	int image_name_len, image_type_len, image_description_len, config_default_len,
-		config_description_len, config_loadables_len;
+		config_description_len, config_loadables_len, bootconf_len;
 	sector_t start_sect, nr_sects;
 	size_t label_min;
 	struct device_node *np = NULL;
-	const char *bootconf;
+	char *bootconf = NULL, *bootconf_term;
 	const char *loadable;
 	const char *select_rootfs = NULL;
 	bool found;
@@ -143,10 +143,17 @@ int parse_fit_partitions(struct parsed_partitions *state, u64 fit_start_sector,
 		return -ENOMEM;
 
 	np = of_find_node_by_path("/chosen");
-	if (np)
-		bootconf = of_get_property(np, "u-boot,bootconf", NULL);
-	else
-		bootconf = NULL;
+	if (np) {
+		bootconf_c = of_get_property(np, "u-boot,bootconf", &bootconf_len);
+		if (bootconf_c && bootconf_len)
+			bootconf = kmemdup_nul(bootconf_c, bootconf_len, GFP_KERNEL);
+	}
+
+	if (bootconf) {
+		bootconf_term = strchr(bootconf, '#');
+		if (bootconf_term)
+			*bootconf_term = '\0';
+	}
 
 	config = fdt_path_offset(fit, FIT_CONFS_PATH);
 	if (config < 0) {
@@ -285,6 +292,7 @@ int parse_fit_partitions(struct parsed_partitions *state, u64 fit_start_sector,
 		strlcat(state->pp_buf, tmp, PAGE_SIZE);
 	}
 ret_out:
+	kfree(bootconf);
 	kfree(fit);
 	return ret;
 }




More information about the lede-commits mailing list