Message ID | 20230816181437.572997-4-richard.henderson@linaro.org |
---|---|
State | New |
Headers | show |
Series | linux-user: Rewrite open_self_maps | expand |
On 16/8/23 20:14, Richard Henderson wrote: > PIE executables are usually linked at offset 0 and are > relocated somewhere during load. The hiaddr needs to > be adjusted to keep the brk next to the executable. > > Cc: qemu-stable@nongnu.org > Fixes: 1f356e8c013 ("linux-user: Adjust initial brk when interpreter is close to executable") > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > linux-user/elfload.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/linux-user/elfload.c b/linux-user/elfload.c > index ccfbf82836..ab11f141c3 100644 > --- a/linux-user/elfload.c > +++ b/linux-user/elfload.c > @@ -3278,7 +3278,7 @@ static void load_elf_image(const char *image_name, const ImageSource *src, > info->start_data = -1; > info->end_data = 0; > /* Usual start for brk is after all sections of the main executable. */ > - info->brk = TARGET_PAGE_ALIGN(hiaddr); > + info->brk = TARGET_PAGE_ALIGN(hiaddr + load_bias); Did you got some odd behavior or figured that by code review? Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
16.08.2023 21:14, Richard Henderson wrote: > PIE executables are usually linked at offset 0 and are > relocated somewhere during load. The hiaddr needs to > be adjusted to keep the brk next to the executable. > > Cc: qemu-stable@nongnu.org > Fixes: 1f356e8c013 ("linux-user: Adjust initial brk when interpreter is close to executable") FWIW, 1f356e8c013 is v8.1.0-rc2-86, - why did you Cc qemu-stable@? If this "Adjust brk for load_bias" fix isn't supposed to be part of 8.1.0 release, sure thing I'll pick it up for stable-8.1, but it looks like it should be in 8.1.0. Or are you saying 1f356e8c013 should be picked for stable-8.0, together with this one? (We're yet to decide if stable-8.0 should have any recent linux-user changes). /mjt
On 8/17/23 01:53, Philippe Mathieu-Daudé wrote: > On 16/8/23 20:14, Richard Henderson wrote: >> PIE executables are usually linked at offset 0 and are >> relocated somewhere during load. The hiaddr needs to >> be adjusted to keep the brk next to the executable. >> >> Cc: qemu-stable@nongnu.org >> Fixes: 1f356e8c013 ("linux-user: Adjust initial brk when interpreter is close to >> executable") >> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> >> --- >> linux-user/elfload.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/linux-user/elfload.c b/linux-user/elfload.c >> index ccfbf82836..ab11f141c3 100644 >> --- a/linux-user/elfload.c >> +++ b/linux-user/elfload.c >> @@ -3278,7 +3278,7 @@ static void load_elf_image(const char *image_name, const >> ImageSource *src, >> info->start_data = -1; >> info->end_data = 0; >> /* Usual start for brk is after all sections of the main executable. */ >> - info->brk = TARGET_PAGE_ALIGN(hiaddr); >> + info->brk = TARGET_PAGE_ALIGN(hiaddr + load_bias); > > Did you got some odd behavior or figured that by > code review? > > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Odd behaviour, easily seen by [heap] being weird or missing. r~
On 8/17/23 09:04, Michael Tokarev wrote: > 16.08.2023 21:14, Richard Henderson wrote: >> PIE executables are usually linked at offset 0 and are >> relocated somewhere during load. The hiaddr needs to >> be adjusted to keep the brk next to the executable. >> >> Cc: qemu-stable@nongnu.org >> Fixes: 1f356e8c013 ("linux-user: Adjust initial brk when interpreter is close to >> executable") > > FWIW, 1f356e8c013 is v8.1.0-rc2-86, - why did you Cc qemu-stable@? > > If this "Adjust brk for load_bias" fix isn't supposed to be part of 8.1.0 release, > sure thing I'll pick it up for stable-8.1, but it looks like it should be in 8.1.0. > > Or are you saying 1f356e8c013 should be picked for stable-8.0, together with this one? > > (We're yet to decide if stable-8.0 should have any recent linux-user changes). This has missed 8.1.0-rc4 and therefore will not be in 8.1.0. I have tagged it stable for stable-8.1 for 8.1.1. r~
diff --git a/linux-user/elfload.c b/linux-user/elfload.c index ccfbf82836..ab11f141c3 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -3278,7 +3278,7 @@ static void load_elf_image(const char *image_name, const ImageSource *src, info->start_data = -1; info->end_data = 0; /* Usual start for brk is after all sections of the main executable. */ - info->brk = TARGET_PAGE_ALIGN(hiaddr); + info->brk = TARGET_PAGE_ALIGN(hiaddr + load_bias); info->elf_flags = ehdr->e_flags; prot_exec = PROT_EXEC;
PIE executables are usually linked at offset 0 and are relocated somewhere during load. The hiaddr needs to be adjusted to keep the brk next to the executable. Cc: qemu-stable@nongnu.org Fixes: 1f356e8c013 ("linux-user: Adjust initial brk when interpreter is close to executable") Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- linux-user/elfload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)