From 4d949da965a99ab33798af49e5584c8bb9f0f626 Mon Sep 17 00:00:00 2001 From: Juro Bystricky Date: Wed, 30 Mar 2016 17:13:54 -0700 Subject: relocate_sdk: additional error checks When installing SDK in a non-default location and the path length of the SDK install location is longer than the path length of the default SDK location, relocation of .ldsochache section will overwrite file location outside of the .ldsocache section size. In addition, additional checks were added to ensure that any path in sections .gccrelocprefix and .ldsochache will not exceed the space allocated for it within the file, which would also result in file corruption. [YOCTO #9268] Signed-off-by: Juro Bystricky Signed-off-by: Richard Purdie --- scripts/relocate_sdk.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'scripts') diff --git a/scripts/relocate_sdk.py b/scripts/relocate_sdk.py index ceca1f2563..99fca86a12 100755 --- a/scripts/relocate_sdk.py +++ b/scripts/relocate_sdk.py @@ -112,7 +112,7 @@ def change_interpreter(elf_file_name): f.write(dl_path) break -def change_dl_sysdirs(): +def change_dl_sysdirs(elf_file_name): if arch == 32: sh_fmt = "= sh_size): + print("ERROR: could not relocate %s, .ldsocache section size = %i and %i is needed." \ + % (elf_file_name, sh_size, len(new_ldsocache_path))) + sys.exit(-1) # pad with zeros new_ldsocache_path += b("\0") * (sh_size - len(new_ldsocache_path)) # write it back @@ -167,6 +172,10 @@ def change_dl_sysdirs(): path = f.read(4096) new_path = old_prefix.sub(new_prefix, path) new_path = new_path.rstrip(b("\0")) + if (len(new_path) >= 4096): + print("ERROR: could not relocate %s, max path size = 4096 and %i is needed." \ + % (elf_file_name, len(new_path))) + sys.exit(-1) # pad with zeros new_path += b("\0") * (4096 - len(new_path)) #print "Changing %s to %s at %s" % (str(path), str(new_path), str(offset)) @@ -241,7 +250,7 @@ for e in executables_list: if arch: parse_elf_header() change_interpreter(e) - change_dl_sysdirs() + change_dl_sysdirs(e) """ change permissions back """ if perms: -- cgit v1.2.3