X-Git-Url: https://git.tld-linux.org/?p=packages%2Fqemu.git;a=blobdiff_plain;f=qemu-user-execve.patch;fp=qemu-user-execve.patch;h=4faf7359d475e817c9d654cd2862ad58c1c07e85;hp=bbaf83e694d8a2368bb9089a65fde958f068d9ed;hb=7036d3f1c5e0fab5ea489ea00ba5b2e309e74a52;hpb=03e2dc25997fc63182b12f2932412c0dc1ccdcfd diff --git a/qemu-user-execve.patch b/qemu-user-execve.patch index bbaf83e..4faf735 100644 --- a/qemu-user-execve.patch +++ b/qemu-user-execve.patch @@ -45,18 +45,18 @@ Reviewed-by: Laurent Vivier v3 changes: - rebase the patchset against current code -diff -urNpa qemu-7.1.0.orig/linux-user/main.c qemu-7.1.0/linux-user/main.c ---- qemu-7.1.0.orig/linux-user/main.c 2022-09-02 16:12:25.825166528 +0200 -+++ qemu-7.1.0/linux-user/main.c 2022-09-02 16:12:55.593230519 +0200 +diff -urNpa qemu-7.2.0.orig/linux-user/main.c qemu-7.2.0/linux-user/main.c +--- qemu-7.2.0.orig/linux-user/main.c 2023-02-08 21:23:07.149156085 +0100 ++++ qemu-7.2.0/linux-user/main.c 2023-02-08 21:23:36.695149312 +0100 @@ -123,6 +123,7 @@ static void usage(int exitcode); static const char *interp_prefix = CONFIG_QEMU_INTERP_PREFIX; const char *qemu_uname_release; +const char *qemu_execve_path; + #if !defined(TARGET_DEFAULT_STACK_SIZE) /* XXX: on x86 MAP_GROWSDOWN only works if ESP <= address + 32, so - we allocate a bigger stack. Need a better solution, for example -@@ -356,6 +357,11 @@ static void handle_arg_guest_base(const +@@ -362,6 +363,11 @@ static void handle_arg_guest_base(const have_guest_base = true; } @@ -68,7 +68,7 @@ diff -urNpa qemu-7.1.0.orig/linux-user/main.c qemu-7.1.0/linux-user/main.c static void handle_arg_reserved_va(const char *arg) { char *p; -@@ -458,6 +464,8 @@ static const struct qemu_argument arg_ta +@@ -464,6 +470,8 @@ static const struct qemu_argument arg_ta "uname", "set qemu uname release string to 'uname'"}, {"B", "QEMU_GUEST_BASE", true, handle_arg_guest_base, "address", "set guest_base address to 'address'"}, @@ -77,10 +77,10 @@ diff -urNpa qemu-7.1.0.orig/linux-user/main.c qemu-7.1.0/linux-user/main.c {"R", "QEMU_RESERVED_VA", true, handle_arg_reserved_va, "size", "reserve 'size' bytes for guest virtual address space"}, {"d", "QEMU_LOG", true, handle_arg_log, -diff -urNpa qemu-7.1.0.orig/linux-user/syscall.c qemu-7.1.0/linux-user/syscall.c ---- qemu-7.1.0.orig/linux-user/syscall.c 2022-09-02 16:12:25.833166545 +0200 -+++ qemu-7.1.0/linux-user/syscall.c 2022-09-02 16:12:55.595230523 +0200 -@@ -8330,6 +8330,109 @@ static target_timer_t get_timer_id(abi_l +diff -urNpa qemu-7.2.0.orig/linux-user/syscall.c qemu-7.2.0/linux-user/syscall.c +--- qemu-7.2.0.orig/linux-user/syscall.c 2023-02-08 21:23:07.150156084 +0100 ++++ qemu-7.2.0/linux-user/syscall.c 2023-02-08 21:28:50.327077355 +0100 +@@ -8378,6 +8378,109 @@ static target_timer_t get_timer_id(abi_l return timerid; } @@ -190,23 +190,29 @@ diff -urNpa qemu-7.1.0.orig/linux-user/syscall.c qemu-7.1.0/linux-user/syscall.c static int target_to_host_cpu_mask(unsigned long *host_mask, size_t host_size, abi_ulong target_addr, -@@ -8843,7 +8946,12 @@ static abi_long do_syscall1(CPUArchState - * before the execve completes and makes it the other +@@ -8933,9 +9036,17 @@ static abi_long do_syscall1(CPUArchState * program's problem. */ -- ret = get_errno(safe_execve(p, argp, envp)); -+ if (qemu_execve_path && *qemu_execve_path) { -+ ret = get_errno(qemu_execve(p, argp, envp)); -+ } else { -+ ret = get_errno(safe_execve(p, argp, envp)); -+ } -+ + if (is_proc_myself(p, "exe")) { +- ret = get_errno(safe_execve(exec_path, argp, envp)); ++ if (qemu_execve_path && *qemu_execve_path) { ++ ret = get_errno(qemu_execve(exec_path, argp, envp)); ++ } else { ++ ret = get_errno(safe_execve(exec_path, argp, envp)); ++ } + } else { +- ret = get_errno(safe_execve(p, argp, envp)); ++ if (qemu_execve_path && *qemu_execve_path) { ++ ret = get_errno(qemu_execve(p, argp, envp)); ++ } else { ++ ret = get_errno(safe_execve(p, argp, envp)); ++ } + } unlock_user(p, arg1, 0); - goto execve_end; -diff -urNpa qemu-7.1.0.orig/linux-user/user-internals.h qemu-7.1.0/linux-user/user-internals.h ---- qemu-7.1.0.orig/linux-user/user-internals.h 2022-09-02 16:12:25.822166522 +0200 -+++ qemu-7.1.0/linux-user/user-internals.h 2022-09-02 16:12:55.595230523 +0200 +diff -urNpa qemu-7.2.0.orig/linux-user/user-internals.h qemu-7.2.0/linux-user/user-internals.h +--- qemu-7.2.0.orig/linux-user/user-internals.h 2023-02-08 21:23:07.148156085 +0100 ++++ qemu-7.2.0/linux-user/user-internals.h 2023-02-08 21:23:36.697149312 +0100 @@ -27,6 +27,7 @@ void init_task_state(TaskState *ts); void task_settid(TaskState *); void stop_all_tasks(void);