linux-user/flatload: Take mmap_lock in load_flt_binary()
load_flt_binary() calls load_flat_file() -> page_set_flags().
page_set_flags() must be called with the mmap_lock held,
otherwise it aborts:
$ qemu-arm -L stm32/lib/ stm32/bin/busybox
qemu-arm: ../accel/tcg/user-exec.c:505: page_set_flags: Assertion `have_mmap_lock()' failed.
Aborted (core dumped)
Fix by taking the lock in load_flt_binary().
Fixes: fbd3c4cff6
("linux-user/arm: Mark the commpage executable")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2525
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-ID: <20240822095045.72643-3-philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
2af37e7919
commit
a9ee641bd4
@ -487,7 +487,10 @@ int load_flt_binary(struct linux_binprm *bprm, struct image_info *info)
|
|||||||
stack_len += (bprm->envc + 1) * 4; /* the envp array */
|
stack_len += (bprm->envc + 1) * 4; /* the envp array */
|
||||||
|
|
||||||
|
|
||||||
|
mmap_lock();
|
||||||
res = load_flat_file(bprm, libinfo, 0, &stack_len);
|
res = load_flat_file(bprm, libinfo, 0, &stack_len);
|
||||||
|
mmap_unlock();
|
||||||
|
|
||||||
if (is_error(res)) {
|
if (is_error(res)) {
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user