map PIE at map_end instead of at user_start
This commit is contained in:
@ -89,12 +89,12 @@ int prepare_process_ranges_args_envs(struct thread *thread,
|
|||||||
|
|
||||||
n = p->num_sections;
|
n = p->num_sections;
|
||||||
|
|
||||||
aout_base = (pn->reloc)? vm->region.user_start: 0;
|
aout_base = (pn->reloc)? vm->region.map_end: 0;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
if (pn->sections[i].interp && (interp_nbase == (uintptr_t)-1)) {
|
if (pn->sections[i].interp && (interp_nbase == (uintptr_t)-1)) {
|
||||||
interp_obase = pn->sections[i].vaddr;
|
interp_obase = pn->sections[i].vaddr;
|
||||||
interp_obase -= (interp_obase % pn->interp_align);
|
interp_obase -= (interp_obase % pn->interp_align);
|
||||||
interp_nbase = vm->region.map_start;
|
interp_nbase = vm->region.map_end;
|
||||||
interp_nbase = (interp_nbase + pn->interp_align - 1)
|
interp_nbase = (interp_nbase + pn->interp_align - 1)
|
||||||
& ~(pn->interp_align - 1);
|
& ~(pn->interp_align - 1);
|
||||||
}
|
}
|
||||||
@ -177,6 +177,10 @@ int prepare_process_ranges_args_envs(struct thread *thread,
|
|||||||
(e > vm->region.data_end ?
|
(e > vm->region.data_end ?
|
||||||
e : vm->region.data_end);
|
e : vm->region.data_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (aout_base) {
|
||||||
|
vm->region.map_end = e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (interp_nbase != (uintptr_t)-1) {
|
if (interp_nbase != (uintptr_t)-1) {
|
||||||
|
|||||||
Reference in New Issue
Block a user