linux-user: remove all traces of qemu from /proc/self/cmdline
PATCH 1/1 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.
--- linux-user/syscall.c | 47 +++++++---------------------------------------- 1 file changed, 7 insertions(+), 40 deletions(-)
linux-user/syscall.c +7 -40
@@ -6988,52 +6988,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)
Signature · 7 lines
2.10.0 -- Andreas Schwab, SUSE Labs, [email protected] GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE 1748 E4D4 88E3 0EEA B9D7 "And now for something completely different."
Your series seems to have some coding style problems. See output below for more information:
Hi,
Your series seems to have some coding style problems. See output below for more information:
Type: series
Message-id: [email protected]
Subject: [Qemu-devel] [PATCH] linux-user: remove all traces of qemu from /proc/self/cmdline
=== TEST SCRIPT BEGIN ===
#!/bin/bash
BASE=base
n=1
total=$(git log --oneline $BASE.. | wc -l)
failed=0
# Useful git options
git config --local diff.renamelimit 0
git config --local diff.renames True
commits="$(git log --format=%H --reverse $BASE..)" for c in $commits; do
echo "Checking PATCH $n/$total: $(git show --no-patch --format=%s $c)..."
if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then
failed=1
echo
fi
n=$((n+1))done
exit $failed
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
From https://github.com/patchew-project/qemu
* [new tag] patchew/[email protected] -> patchew/[email protected]
* [new tag] patchew/[email protected] -> patchew/[email protected]
Switched to a new branch 'test'
7506c8f linux-user: remove all traces of qemu from /proc/self/cmdline
=== OUTPUT BEGIN ===
Checking PATCH 1/1: linux-user: remove all traces of qemu from /proc/self/cmdline...
ERROR: space prohibited between function name and open parenthesis '(' #37: FILE: linux-user/syscall.c:7123:
+ size_t len = strlen (bprm->argv[i]) + 1;
total: 1 errors, 0 warnings, 59 lines checked
Your patch has style problems, please review. If any of these errors are false positives report them to the maintainer, see CHECKPATCH in MAINTAINERS.
=== OUTPUT END ===
Test command exited with code: 1
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to [email protected]