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

Closed
andreas-schwab wants to merge 1 commits from opensuse-2.7 into opensuse-2.7

View File

@@ -7013,52 +7013,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;
CPUState *cpu = ENV_GET_CPU((CPUArchState *)cpu_env);
struct linux_binprm *bprm = ((TaskState *)cpu->opaque)->bprm;
int i;
fd_orig = open("/proc/self/cmdline", O_RDONLY);
if (fd_orig < 0) {
return fd_orig;
}
for (i = 0; i < bprm->argc; i++) {
size_t len = strlen(bprm->argv[i]) + 1;
while (true) {
ssize_t nb_read;
char buf[128];
char *cp_buf = buf;
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)