Snap for 9430503 from 51b29220691bc710d6e7d7ad4266d2578a1bfe40 to t-keystone-qcom-release
Change-Id: I54deaabd918226b1ad7fee5d4f1e8688ccd00da4
diff --git a/ufdt_convert.c b/ufdt_convert.c
index 5c69f1f..9e7922a 100644
--- a/ufdt_convert.c
+++ b/ufdt_convert.c
@@ -196,13 +196,21 @@
const char *alias_path =
ufdt_node_get_fdt_prop_data(aliases_node, &path_len);
- if (alias_path == NULL) {
- dto_error("Failed to find alias %s\n", path);
+ if (alias_path == NULL || path_len == 0) {
+ dto_error("Failed to find valid alias %s\n", path);
+ return NULL;
+ }
+
+ /* property data must be a nul terminated string */
+ int alias_len = strnlen(alias_path, path_len);
+
+ if (alias_len != path_len - 1 || alias_len == 0) {
+ dto_error("Invalid alias for %s\n", path);
return NULL;
}
struct ufdt_node *target_node =
- ufdt_node_get_node_by_path_len(tree->root, alias_path, path_len);
+ ufdt_node_get_node_by_path_len(tree->root, alias_path, alias_len);
return ufdt_node_get_node_by_path_len(target_node, next_slash,
end - next_slash);
@@ -292,9 +300,16 @@
return ufdt_construct(NULL, pool);
}
- struct ufdt *res_tree = ufdt_construct(fdtp, pool);
int end_offset;
int start_tag = fdt_next_tag(fdtp, start_offset, &end_offset);
+
+ if (start_tag != FDT_BEGIN_NODE) {
+ return ufdt_construct(NULL, pool);
+ }
+
+ struct ufdt *res_tree = ufdt_construct(fdtp, pool);
+ if (res_tree == NULL) return NULL;
+
res_tree->root =
fdt_to_ufdt_tree(fdtp, start_offset, &end_offset, start_tag, pool);