|
@@ -97,11 +97,12 @@ def change_interpreter(elf_file_name):
|
|
|
if (len(new_dl_path) >= p_filesz):
|
|
|
print("ERROR: could not relocate %s, interp size = %i and %i is needed." \
|
|
|
% (elf_file_name, p_memsz, len(new_dl_path) + 1))
|
|
|
- break
|
|
|
+ return False
|
|
|
dl_path = new_dl_path + b("\0") * (p_filesz - len(new_dl_path))
|
|
|
f.seek(p_offset)
|
|
|
f.write(dl_path)
|
|
|
break
|
|
|
+ return True
|
|
|
|
|
|
def change_dl_sysdirs(elf_file_name):
|
|
|
if arch == 32:
|
|
@@ -215,6 +216,7 @@ else:
|
|
|
|
|
|
executables_list = sys.argv[3:]
|
|
|
|
|
|
+errors = False
|
|
|
for e in executables_list:
|
|
|
perms = os.stat(e)[stat.ST_MODE]
|
|
|
if os.access(e, os.W_OK|os.R_OK):
|
|
@@ -240,7 +242,8 @@ for e in executables_list:
|
|
|
arch = get_arch()
|
|
|
if arch:
|
|
|
parse_elf_header()
|
|
|
- change_interpreter(e)
|
|
|
+ if not change_interpreter(e):
|
|
|
+ errors = True
|
|
|
change_dl_sysdirs(e)
|
|
|
|
|
|
""" change permissions back """
|
|
@@ -253,3 +256,6 @@ for e in executables_list:
|
|
|
print("New file size for %s is different. Looks like a relocation error!", e)
|
|
|
sys.exit(-1)
|
|
|
|
|
|
+if errors:
|
|
|
+ print("Relocation of one or more executables failed.")
|
|
|
+ sys.exit(-1)
|