rtld-elf: Check the return value of obj_enforce_relro()

The mprotect() call was failing on CheriBSD when changing rtld's relro
page permissions due to missing CHERI capability permissions on the
mprotect() argument but did not report an error since the return value
was being ignored. It should never fail on any supported FreeBSD
architecture, but checking the return value seems like a good
sanity check to me.

Reviewed By:	kib, imp
MFC after:	1 week
Differential Revision: https://reviews.freebsd.org/D30820
This commit is contained in:
Alex Richardson 2021-06-22 09:09:44 +01:00
parent d98a4eb807
commit e3be51b2bc

View File

@ -2288,7 +2288,8 @@ init_rtld(caddr_t mapbase, Elf_Auxinfo **aux_info)
obj_rtld.path = xstrdup(ld_path_rtld);
parse_rtld_phdr(&obj_rtld);
obj_enforce_relro(&obj_rtld);
if (obj_enforce_relro(&obj_rtld) == -1)
rtld_die();
r_debug.r_version = R_DEBUG_VERSION;
r_debug.r_brk = r_debug_state;