From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pekka Enberg Subject: [PATCH] kvm tools: Make 'vm sandbox' more user-friendly Date: Wed, 7 Mar 2012 20:53:59 +0200 Message-ID: <1331146439-21710-1-git-send-email-penberg@kernel.org> Cc: Pekka Enberg , Asias He , Cyrill Gorcunov , Ingo Molnar , Sasha Levin To: kvm@vger.kernel.org Return-path: Received: from mail-lpp01m010-f46.google.com ([209.85.215.46]:35049 "EHLO mail-lpp01m010-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759479Ab2CGSyI (ORCPT ); Wed, 7 Mar 2012 13:54:08 -0500 Received: by lahj13 with SMTP id j13so7617491lah.19 for ; Wed, 07 Mar 2012 10:54:06 -0800 (PST) Sender: kvm-owner@vger.kernel.org List-ID: This patch changes 'vm sandbox' to automatically prefix a program path with "/host" in the guest side making this, for example, work as expected: $ ./vm sandbox -- ~/trinity/trinity --mode=random --dangerous Cc: Asias He Cc: Cyrill Gorcunov Cc: Ingo Molnar Cc: Sasha Levin Signed-off-by: Pekka Enberg --- tools/kvm/builtin-run.c | 29 ++++++++++++++++++++++++++--- 1 files changed, 26 insertions(+), 3 deletions(-) diff --git a/tools/kvm/builtin-run.c b/tools/kvm/builtin-run.c index 6acc490..ce76b69 100644 --- a/tools/kvm/builtin-run.c +++ b/tools/kvm/builtin-run.c @@ -847,9 +847,26 @@ static void kvm_write_sandbox_cmd_exactly(int fd, const char *arg) } } +static void resolve_program(const char *src, char *dst, size_t len) +{ + struct stat st; + + stat(src, &st); + + if (S_ISREG(st.st_mode)) { + char resolved_path[PATH_MAX]; + + realpath(src, resolved_path); + + snprintf(dst, len, "/host%s", resolved_path); + } else + strncpy(dst, src, len); +} + static void kvm_run_write_sandbox_cmd(const char **argv, int argc) { const char script_hdr[] = "#! /bin/bash\n\n"; + char program[PATH_MAX]; int fd; remove(sandbox); @@ -861,11 +878,17 @@ static void kvm_run_write_sandbox_cmd(const char **argv, int argc) if (write(fd, script_hdr, sizeof(script_hdr) - 1) <= 0) die("Failed writing sandbox script"); + resolve_program(argv[0], program, PATH_MAX); + kvm_write_sandbox_cmd_exactly(fd, program); + + argv++; + argc--; + while (argc) { + if (write(fd, " ", 1) <= 0) + die("Failed writing sandbox script"); + kvm_write_sandbox_cmd_exactly(fd, argv[0]); - if (argc - 1) - if (write(fd, " ", 1) <= 0) - die("Failed writing sandbox script"); argv++; argc--; } -- 1.7.6.5