ksmbd: fix race condition between tree conn lookup and disconnect
[platform/kernel/linux-starfive.git] / tools / testing / selftests / netfilter / nft_audit.sh
1 #!/bin/bash
2 # SPDX-License-Identifier: GPL-2.0
3 #
4 # Check that audit logs generated for nft commands are as expected.
5
6 SKIP_RC=4
7 RC=0
8
9 nft --version >/dev/null 2>&1 || {
10         echo "SKIP: missing nft tool"
11         exit $SKIP_RC
12 }
13
14 logfile=$(mktemp)
15 echo "logging into $logfile"
16 ./audit_logread >"$logfile" &
17 logread_pid=$!
18 trap 'kill $logread_pid; rm -f $logfile' EXIT
19 exec 3<"$logfile"
20
21 do_test() { # (cmd, log)
22         echo -n "testing for cmd: $1 ... "
23         cat <&3 >/dev/null
24         $1 >/dev/null || exit 1
25         sleep 0.1
26         res=$(diff -a -u <(echo "$2") - <&3)
27         [ $? -eq 0 ] && { echo "OK"; return; }
28         echo "FAIL"
29         echo "$res"
30         ((RC++))
31 }
32
33 nft flush ruleset
34
35 for table in t1 t2; do
36         do_test "nft add table $table" \
37         "table=$table family=2 entries=1 op=nft_register_table"
38
39         do_test "nft add chain $table c1" \
40         "table=$table family=2 entries=1 op=nft_register_chain"
41
42         do_test "nft add chain $table c2; add chain $table c3" \
43         "table=$table family=2 entries=2 op=nft_register_chain"
44
45         cmd="add rule $table c1 counter"
46
47         do_test "nft $cmd" \
48         "table=$table family=2 entries=1 op=nft_register_rule"
49
50         do_test "nft $cmd; $cmd" \
51         "table=$table family=2 entries=2 op=nft_register_rule"
52
53         cmd=""
54         sep=""
55         for chain in c2 c3; do
56                 for i in {1..3}; do
57                         cmd+="$sep add rule $table $chain counter"
58                         sep=";"
59                 done
60         done
61         do_test "nft $cmd" \
62         "table=$table family=2 entries=6 op=nft_register_rule"
63 done
64
65 do_test 'nft reset rules t1 c2' \
66 'table=t1 family=2 entries=3 op=nft_reset_rule'
67
68 do_test 'nft reset rules table t1' \
69 'table=t1 family=2 entries=3 op=nft_reset_rule
70 table=t1 family=2 entries=3 op=nft_reset_rule
71 table=t1 family=2 entries=3 op=nft_reset_rule'
72
73 do_test 'nft reset rules' \
74 'table=t1 family=2 entries=3 op=nft_reset_rule
75 table=t1 family=2 entries=3 op=nft_reset_rule
76 table=t1 family=2 entries=3 op=nft_reset_rule
77 table=t2 family=2 entries=3 op=nft_reset_rule
78 table=t2 family=2 entries=3 op=nft_reset_rule
79 table=t2 family=2 entries=3 op=nft_reset_rule'
80
81 for ((i = 0; i < 500; i++)); do
82         echo "add rule t2 c3 counter accept comment \"rule $i\""
83 done | do_test 'nft -f -' \
84 'table=t2 family=2 entries=500 op=nft_register_rule'
85
86 do_test 'nft reset rules t2 c3' \
87 'table=t2 family=2 entries=189 op=nft_reset_rule
88 table=t2 family=2 entries=188 op=nft_reset_rule
89 table=t2 family=2 entries=126 op=nft_reset_rule'
90
91 do_test 'nft reset rules t2' \
92 'table=t2 family=2 entries=3 op=nft_reset_rule
93 table=t2 family=2 entries=3 op=nft_reset_rule
94 table=t2 family=2 entries=186 op=nft_reset_rule
95 table=t2 family=2 entries=188 op=nft_reset_rule
96 table=t2 family=2 entries=129 op=nft_reset_rule'
97
98 do_test 'nft reset rules' \
99 'table=t1 family=2 entries=3 op=nft_reset_rule
100 table=t1 family=2 entries=3 op=nft_reset_rule
101 table=t1 family=2 entries=3 op=nft_reset_rule
102 table=t2 family=2 entries=3 op=nft_reset_rule
103 table=t2 family=2 entries=3 op=nft_reset_rule
104 table=t2 family=2 entries=180 op=nft_reset_rule
105 table=t2 family=2 entries=188 op=nft_reset_rule
106 table=t2 family=2 entries=135 op=nft_reset_rule'
107
108 exit $RC