Commit 3084097c authored by Martin KaFai Lau's avatar Martin KaFai Lau Committed by Daniel Borkmann

selftests/bpf: Remove the "/sys" mount and umount dance in {open,close}_netns

The previous patches have removed the need to do the mount and umount
dance when switching netns. In particular:
* Avoid remounting /sys/fs/bpf to have a clean start
* Avoid remounting /sys to get a ifindex of a particular netns

This patch can finally remove the mount and umount dance in
{open,close}_netns which is unnecessarily complicated and
error-prone.
Signed-off-by: default avatarMartin KaFai Lau <martin.lau@kernel.org>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarStanislav Fomichev <sdf@google.com>
Link: https://lore.kernel.org/bpf/20221129070900.3142427-6-martin.lau@linux.dev
parent 5dc42a7f
...@@ -390,49 +390,6 @@ struct nstoken { ...@@ -390,49 +390,6 @@ struct nstoken {
int orig_netns_fd; int orig_netns_fd;
}; };
static int setns_by_fd(int nsfd)
{
int err;
err = setns(nsfd, CLONE_NEWNET);
close(nsfd);
if (!ASSERT_OK(err, "setns"))
return err;
/* Switch /sys to the new namespace so that e.g. /sys/class/net
* reflects the devices in the new namespace.
*/
err = unshare(CLONE_NEWNS);
if (!ASSERT_OK(err, "unshare"))
return err;
/* Make our /sys mount private, so the following umount won't
* trigger the global umount in case it's shared.
*/
err = mount("none", "/sys", NULL, MS_PRIVATE, NULL);
if (!ASSERT_OK(err, "remount private /sys"))
return err;
err = umount2("/sys", MNT_DETACH);
if (!ASSERT_OK(err, "umount2 /sys"))
return err;
err = mount("sysfs", "/sys", "sysfs", 0, NULL);
if (!ASSERT_OK(err, "mount /sys"))
return err;
err = mount("bpffs", "/sys/fs/bpf", "bpf", 0, NULL);
if (!ASSERT_OK(err, "mount /sys/fs/bpf"))
return err;
err = mount("debugfs", "/sys/kernel/debug", "debugfs", 0, NULL);
if (!ASSERT_OK(err, "mount /sys/kernel/debug"))
return err;
return 0;
}
struct nstoken *open_netns(const char *name) struct nstoken *open_netns(const char *name)
{ {
int nsfd; int nsfd;
...@@ -453,8 +410,9 @@ struct nstoken *open_netns(const char *name) ...@@ -453,8 +410,9 @@ struct nstoken *open_netns(const char *name)
if (!ASSERT_GE(nsfd, 0, "open netns fd")) if (!ASSERT_GE(nsfd, 0, "open netns fd"))
goto fail; goto fail;
err = setns_by_fd(nsfd); err = setns(nsfd, CLONE_NEWNET);
if (!ASSERT_OK(err, "setns_by_fd")) close(nsfd);
if (!ASSERT_OK(err, "setns"))
goto fail; goto fail;
return token; return token;
...@@ -465,6 +423,7 @@ struct nstoken *open_netns(const char *name) ...@@ -465,6 +423,7 @@ struct nstoken *open_netns(const char *name)
void close_netns(struct nstoken *token) void close_netns(struct nstoken *token)
{ {
ASSERT_OK(setns_by_fd(token->orig_netns_fd), "setns_by_fd"); ASSERT_OK(setns(token->orig_netns_fd, CLONE_NEWNET), "setns");
close(token->orig_netns_fd);
free(token); free(token);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment