From: David Gibson <david@gibson.dropbear.id.au>
To: passt-dev@passt.top, Stefano Brivio <sbrivio@redhat.com>
Cc: David Gibson <david@gibson.dropbear.id.au>
Subject: [PATCH 14/14] nstool: Enter holder's cwd when changing mount ns with nstool exec
Date: Tue, 4 Apr 2023 11:46:38 +1000 [thread overview]
Message-ID: <20230404014638.3225556-15-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20230404014638.3225556-1-david@gibson.dropbear.id.au>
If we enter a mount namespace with nstool exec our working directory will
be changed to / in the new mount ns. This is surprising if we haven't
actually altered any mounts yet in the new ns. Instead, change the working
directory to match that of the holder process in this situation.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
test/nstool.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/test/nstool.c b/test/nstool.c
index c07eabb..a1c31be 100644
--- a/test/nstool.c
+++ b/test/nstool.c
@@ -417,6 +417,7 @@ static void cmd_exec(int argc, char *argv[])
const struct ns_type *nst;
int ctlfd, flags, opt, rc;
const char *const *xargs;
+ struct holder_info info;
bool keepcaps = false;
struct ucred peercred;
const char *exe;
@@ -441,7 +442,7 @@ static void cmd_exec(int argc, char *argv[])
sockpath = argv[optind];
- ctlfd = connect_ctl(sockpath, false, NULL, &peercred);
+ ctlfd = connect_ctl(sockpath, false, &info, &peercred);
flags = detect_namespaces(peercred.pid);
@@ -472,6 +473,15 @@ static void cmd_exec(int argc, char *argv[])
nst->name, strerror(errno));
}
+ /* If we've entered a mount ns, our cwd has changed to /.
+ * Switch to the cwd of the holder, which is probably less
+ * surprising. */
+ if (flags & CLONE_NEWNS) {
+ rc = chdir(info.cwd);
+ if (rc < 0)
+ die("chdir(\"%s\"): %s\n", info.cwd, strerror(errno));
+ }
+
/* Fork to properly enter PID namespace */
xpid = fork();
if (xpid < 0)
--
@@ -417,6 +417,7 @@ static void cmd_exec(int argc, char *argv[])
const struct ns_type *nst;
int ctlfd, flags, opt, rc;
const char *const *xargs;
+ struct holder_info info;
bool keepcaps = false;
struct ucred peercred;
const char *exe;
@@ -441,7 +442,7 @@ static void cmd_exec(int argc, char *argv[])
sockpath = argv[optind];
- ctlfd = connect_ctl(sockpath, false, NULL, &peercred);
+ ctlfd = connect_ctl(sockpath, false, &info, &peercred);
flags = detect_namespaces(peercred.pid);
@@ -472,6 +473,15 @@ static void cmd_exec(int argc, char *argv[])
nst->name, strerror(errno));
}
+ /* If we've entered a mount ns, our cwd has changed to /.
+ * Switch to the cwd of the holder, which is probably less
+ * surprising. */
+ if (flags & CLONE_NEWNS) {
+ rc = chdir(info.cwd);
+ if (rc < 0)
+ die("chdir(\"%s\"): %s\n", info.cwd, strerror(errno));
+ }
+
/* Fork to properly enter PID namespace */
xpid = fork();
if (xpid < 0)
--
2.39.2
next prev parent reply other threads:[~2023-04-04 1:46 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-04 1:46 [PATCH 00/14] Improved tool for testing across multiple namespaces David Gibson
2023-04-04 1:46 ` [PATCH 01/14] nstool: Rename nsholder to nstool David Gibson
2023-04-04 1:46 ` [PATCH 02/14] nstool: Reverse parameters " David Gibson
2023-04-04 1:46 ` [PATCH 03/14] nstool: Move description of its operation modes from comment to usage David Gibson
2023-04-05 11:56 ` Stefano Brivio
2023-04-06 0:10 ` David Gibson
2023-04-04 1:46 ` [PATCH 04/14] nstool: Split some command line parsing and socket setup to subcommands David Gibson
2023-04-05 11:58 ` Stefano Brivio
2023-04-06 2:31 ` David Gibson
2023-04-06 6:47 ` Stefano Brivio
2023-04-06 10:35 ` David Gibson
2023-04-04 1:46 ` [PATCH 05/14] nstool: Replace "pid" subcommand with "info" subcommand David Gibson
2023-04-05 11:58 ` Stefano Brivio
2023-04-06 0:13 ` David Gibson
2023-04-04 1:46 ` [PATCH 06/14] nstool: Detect what namespaces target is in David Gibson
2023-04-05 11:58 ` Stefano Brivio
2023-04-06 0:15 ` David Gibson
2023-04-04 1:46 ` [PATCH 07/14] nstool: Add magic number to advertized information David Gibson
2023-04-05 11:58 ` Stefano Brivio
2023-04-06 0:18 ` David Gibson
2023-04-04 1:46 ` [PATCH 08/14] nstool: Helpers to iterate through namespace types David Gibson
2023-04-05 11:58 ` Stefano Brivio
2023-04-06 0:55 ` David Gibson
2023-04-04 1:46 ` [PATCH 09/14] nstool: Add nstool exec command to execute commands in an nstool namespace David Gibson
2023-04-05 11:58 ` Stefano Brivio
2023-04-06 0:59 ` David Gibson
2023-04-04 1:46 ` [PATCH 10/14] nstool: Add --keep-caps option to nstool exec David Gibson
2023-04-05 11:59 ` Stefano Brivio
2023-04-06 1:11 ` David Gibson
2023-04-04 1:46 ` [PATCH 11/14] test: Initialise ${TRACE} properly David Gibson
2023-04-04 1:46 ` [PATCH 12/14] test: Use "nstool exec" to slightly simplify tests David Gibson
2023-04-05 11:59 ` Stefano Brivio
2023-04-06 1:14 ` David Gibson
2023-04-04 1:46 ` [PATCH 13/14] nstool: Advertise the holder's cwd (in its mountns) across the socket David Gibson
2023-04-04 1:46 ` David Gibson [this message]
2023-04-05 12:01 ` [PATCH 00/14] Improved tool for testing across multiple namespaces Stefano Brivio
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230404014638.3225556-15-david@gibson.dropbear.id.au \
--to=david@gibson.dropbear.id.au \
--cc=passt-dev@passt.top \
--cc=sbrivio@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).