From: Ilya Leoshkevich Date: Tue, 13 Apr 2021 20:58:14 +0000 (+0200) Subject: linux-user/elfload: fix filling psinfo->pr_psargs X-Git-Tag: v6.1.0-rc0~116^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5f779a3a26a9dcc8072d909b7759bb9fade097a9;p=thirdparty%2Fqemu.git linux-user/elfload: fix filling psinfo->pr_psargs The current code dumps the memory between arg_start and arg_end, which contains the argv pointers. This results in the Core was generated by `` message when opening the core file in GDB. This is because the code is supposed to dump the actual arg strings. Fix by using arg_strings and env_strings instead of arg_start and arg_end. Signed-off-by: Ilya Leoshkevich Message-Id: <20210413205814.22821-1-iii@linux.ibm.com> [lv: add missing braces] Signed-off-by: Laurent Vivier --- diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 015eed1a27b..9779263727b 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -3618,11 +3618,12 @@ static int fill_psinfo(struct target_elf_prpsinfo *psinfo, const TaskState *ts) (void) memset(psinfo, 0, sizeof (*psinfo)); - len = ts->info->arg_end - ts->info->arg_start; + len = ts->info->env_strings - ts->info->arg_strings; if (len >= ELF_PRARGSZ) len = ELF_PRARGSZ - 1; - if (copy_from_user(&psinfo->pr_psargs, ts->info->arg_start, len)) + if (copy_from_user(&psinfo->pr_psargs, ts->info->arg_strings, len)) { return -EFAULT; + } for (i = 0; i < len; i++) if (psinfo->pr_psargs[i] == 0) psinfo->pr_psargs[i] = ' ';