Commit 1d9626dc authored by Stanislav Fomichev's avatar Stanislav Fomichev Committed by Alexei Starovoitov

selftests/bpf: add test for BPF flow dissector in the root namespace

Make sure non-root namespaces get an error if root flow dissector is
attached.

Cc: Petar Penkov <ppenkov@google.com>
Acked-by: default avatarSong Liu <songliubraving@fb.com>
Signed-off-by: default avatarStanislav Fomichev <sdf@google.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent a11c397c
...@@ -18,19 +18,55 @@ fi ...@@ -18,19 +18,55 @@ fi
# this is the case and run it with in_netns.sh if it is being run in the root # this is the case and run it with in_netns.sh if it is being run in the root
# namespace. # namespace.
if [[ -z $(ip netns identify $$) ]]; then if [[ -z $(ip netns identify $$) ]]; then
err=0
if bpftool="$(which bpftool)"; then
echo "Testing global flow dissector..."
$bpftool prog loadall ./bpf_flow.o /sys/fs/bpf/flow \
type flow_dissector
if ! unshare --net $bpftool prog attach pinned \
/sys/fs/bpf/flow/flow_dissector flow_dissector; then
echo "Unexpected unsuccessful attach in namespace" >&2
err=1
fi
$bpftool prog attach pinned /sys/fs/bpf/flow/flow_dissector \
flow_dissector
if unshare --net $bpftool prog attach pinned \
/sys/fs/bpf/flow/flow_dissector flow_dissector; then
echo "Unexpected successful attach in namespace" >&2
err=1
fi
if ! $bpftool prog detach pinned \
/sys/fs/bpf/flow/flow_dissector flow_dissector; then
echo "Failed to detach flow dissector" >&2
err=1
fi
rm -rf /sys/fs/bpf/flow
else
echo "Skipping root flow dissector test, bpftool not found" >&2
fi
# Run the rest of the tests in a net namespace.
../net/in_netns.sh "$0" "$@" ../net/in_netns.sh "$0" "$@"
exit $? err=$(( $err + $? ))
fi
# Determine selftest success via shell exit code if (( $err == 0 )); then
exit_handler()
{
if (( $? == 0 )); then
echo "selftests: $TESTNAME [PASS]"; echo "selftests: $TESTNAME [PASS]";
else else
echo "selftests: $TESTNAME [FAILED]"; echo "selftests: $TESTNAME [FAILED]";
fi fi
exit $err
fi
# Determine selftest success via shell exit code
exit_handler()
{
set +e set +e
# Cleanup # Cleanup
......
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