selftests/bpf: Fix wrong size passed to bpf_setsockopt()
authorYang Yingliang <yangyingliang@huawei.com>
Wed, 24 Aug 2022 01:39:07 +0000 (09:39 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 25 Aug 2022 01:59:04 +0000 (18:59 -0700)
sizeof(new_cc) is not real memory size that new_cc points to; introduce
a new_cc_len to store the size and then pass it to bpf_setsockopt().

Fixes: 31123c0360e0 ("selftests/bpf: bpf_setsockopt tests")
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20220824013907.380448-1-yangyingliang@huawei.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
tools/testing/selftests/bpf/progs/setget_sockopt.c

index 4a4cb44..40606ef 100644 (file)
@@ -305,15 +305,19 @@ static int bpf_test_tcp_sockopt(__u32 i, struct loop_ctx *lc)
        if (t->opt == TCP_CONGESTION) {
                char old_cc[16], tmp_cc[16];
                const char *new_cc;
+               int new_cc_len;
 
                if (bpf_getsockopt(ctx, IPPROTO_TCP, TCP_CONGESTION, old_cc, sizeof(old_cc)))
                        return 1;
-               if (!bpf_strncmp(old_cc, sizeof(old_cc), cubic_cc))
+               if (!bpf_strncmp(old_cc, sizeof(old_cc), cubic_cc)) {
                        new_cc = reno_cc;
-               else
+                       new_cc_len = sizeof(reno_cc);
+               } else {
                        new_cc = cubic_cc;
+                       new_cc_len = sizeof(cubic_cc);
+               }
                if (bpf_setsockopt(ctx, IPPROTO_TCP, TCP_CONGESTION, (void *)new_cc,
-                                  sizeof(new_cc)))
+                                  new_cc_len))
                        return 1;
                if (bpf_getsockopt(ctx, IPPROTO_TCP, TCP_CONGESTION, tmp_cc, sizeof(tmp_cc)))
                        return 1;