提交 58de8b96 编写于 作者: A Andreas Schwab 提交者: Riku Voipio

linux-user: remove all traces of qemu from /proc/self/cmdline

Instead of post-processing the real contents use the remembered target
argv.  That removes all traces of qemu, including command line options,
and handles QEMU_ARGV0.
Signed-off-by: NAndreas Schwab <schwab@suse.de>
Signed-off-by: NRiku Voipio <riku.voipio@linaro.org>
上级 b936cb50
......@@ -7358,52 +7358,19 @@ int host_to_target_waitstatus(int status)
static int open_self_cmdline(void *cpu_env, int fd)
{
int fd_orig = -1;
bool word_skipped = false;
fd_orig = open("/proc/self/cmdline", O_RDONLY);
if (fd_orig < 0) {
return fd_orig;
}
CPUState *cpu = ENV_GET_CPU((CPUArchState *)cpu_env);
struct linux_binprm *bprm = ((TaskState *)cpu->opaque)->bprm;
int i;
while (true) {
ssize_t nb_read;
char buf[128];
char *cp_buf = buf;
for (i = 0; i < bprm->argc; i++) {
size_t len = strlen(bprm->argv[i]) + 1;
nb_read = read(fd_orig, buf, sizeof(buf));
if (nb_read < 0) {
int e = errno;
fd_orig = close(fd_orig);
errno = e;
if (write(fd, bprm->argv[i], len) != len) {
return -1;
} else if (nb_read == 0) {
break;
}
if (!word_skipped) {
/* Skip the first string, which is the path to qemu-*-static
instead of the actual command. */
cp_buf = memchr(buf, 0, nb_read);
if (cp_buf) {
/* Null byte found, skip one string */
cp_buf++;
nb_read -= cp_buf - buf;
word_skipped = true;
}
}
if (word_skipped) {
if (write(fd, cp_buf, nb_read) != nb_read) {
int e = errno;
close(fd_orig);
errno = e;
return -1;
}
}
}
return close(fd_orig);
return 0;
}
static int open_self_maps(void *cpu_env, int fd)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册