aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Sitnicki2019-10-17 10:37:52 +0200
committerAlexei Starovoitov2019-10-17 12:10:16 -0700
commit8d285a3b2e83796d33ec3674b25fe0bfcc647e92 (patch)
tree26492fd29d589dbb6100e262bda1b2dedc10f711
parent0142fdc8186ea15e0bff03422ddc7d23b2e71dfc (diff)
selftests/bpf: Restore the netns after flow dissector reattach test
flow_dissector_reattach test changes the netns we run in but does not restore it to the one we started in when finished. This interferes with tests that run after it. Fix it by restoring the netns when done. Fixes: f97eea1756f3 ("selftests/bpf: Check that flow dissector can be re-attached") Reported-by: Alexei Starovoitov <ast@kernel.org> Reported-by: Andrii Nakryiko <andriin@fb.com> Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Martin KaFai Lau <kafai@fb.com> Link: https://lore.kernel.org/bpf/20191017083752.30999-1-jakub@cloudflare.com
-rw-r--r--tools/testing/selftests/bpf/prog_tests/flow_dissector_reattach.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/tools/testing/selftests/bpf/prog_tests/flow_dissector_reattach.c b/tools/testing/selftests/bpf/prog_tests/flow_dissector_reattach.c
index 777faffc4639..1f51ba66b98b 100644
--- a/tools/testing/selftests/bpf/prog_tests/flow_dissector_reattach.c
+++ b/tools/testing/selftests/bpf/prog_tests/flow_dissector_reattach.c
@@ -91,12 +91,18 @@ out_close:
void test_flow_dissector_reattach(void)
{
- int init_net, err;
+ int init_net, self_net, err;
+
+ self_net = open("/proc/self/ns/net", O_RDONLY);
+ if (CHECK_FAIL(self_net < 0)) {
+ perror("open(/proc/self/ns/net");
+ return;
+ }
init_net = open("/proc/1/ns/net", O_RDONLY);
if (CHECK_FAIL(init_net < 0)) {
perror("open(/proc/1/ns/net)");
- return;
+ goto out_close;
}
err = setns(init_net, CLONE_NEWNET);
@@ -108,7 +114,7 @@ void test_flow_dissector_reattach(void)
if (is_attached(init_net)) {
test__skip();
printf("Can't test with flow dissector attached to init_net\n");
- return;
+ goto out_setns;
}
/* First run tests in root network namespace */
@@ -118,10 +124,17 @@ void test_flow_dissector_reattach(void)
err = unshare(CLONE_NEWNET);
if (CHECK_FAIL(err)) {
perror("unshare(CLONE_NEWNET)");
- goto out_close;
+ goto out_setns;
}
do_flow_dissector_reattach();
+out_setns:
+ /* Move back to netns we started in. */
+ err = setns(self_net, CLONE_NEWNET);
+ if (CHECK_FAIL(err))
+ perror("setns(/proc/self/ns/net)");
+
out_close:
close(init_net);
+ close(self_net);
}