diff options
author | Mike McTernan <mikemcternan@google.com> | 2022-09-14 15:21:40 +0100 |
---|---|---|
committer | Mike McTernan <mikemcternan@google.com> | 2022-09-15 10:20:45 +0000 |
commit | 7c57a20a9c74216fece757537f5d4e9115b3a904 (patch) | |
tree | 5bbbc4b9d910f1c9d98d4c3c38e0b75bb808f6d3 /ufdt_convert.c | |
parent | a8bd3d52649458499db18d0b0a2e29e40edd6d25 (diff) | |
download | libufdt-7c57a20a9c74216fece757537f5d4e9115b3a904.tar.gz |
Fix handling of invalid alias property values.
Bug: 246194233
Test: mmma system/libufdt && system/libufdt/tests/run_tests.sh
Test: mmma system/libufdt && system/libufdt/tests/run_performance_test.sh
Test: test with fuzzer case
Test: run fuzzer to check coverage beyond added checks
Ignore-AOSP-First: Security
Change-Id: I229cd2ff97a1bea807fdb9d0f4642af5219fc0af
Diffstat (limited to 'ufdt_convert.c')
-rw-r--r-- | ufdt_convert.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/ufdt_convert.c b/ufdt_convert.c index 92aecef..85f2986 100644 --- a/ufdt_convert.c +++ b/ufdt_convert.c @@ -204,13 +204,21 @@ struct ufdt_node *ufdt_get_node_by_path_len(struct ufdt *tree, const char *path, 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); |