aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--target/linux/generic/files/block/partitions/fit.c22
1 files 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;
}