]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
selftests/bpf: Validate CHECKSUM_COMPLETE option
authorVadim Fedorenko <vadfed@meta.com>
Thu, 6 Jun 2024 14:58:51 +0000 (07:58 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 13 Jun 2024 12:29:53 +0000 (14:29 +0200)
Adjust skb program test to run with checksum validation.

Signed-off-by: Vadim Fedorenko <vadfed@meta.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/bpf/20240606145851.229116-2-vadfed@meta.com
tools/testing/selftests/bpf/prog_tests/test_skb_pkt_end.c
tools/testing/selftests/bpf/progs/skb_pkt_end.c

index ae93411fd5824c22b184d252d661e84ad3a968d8..09ca13bdf6ca2796490532d05d676d0bdfccc94e 100644 (file)
@@ -11,6 +11,7 @@ static int sanity_run(struct bpf_program *prog)
                .data_in = &pkt_v4,
                .data_size_in = sizeof(pkt_v4),
                .repeat = 1,
+               .flags = BPF_F_TEST_SKB_CHECKSUM_COMPLETE,
        );
 
        prog_fd = bpf_program__fd(prog);
index db4abd2682fcfd107fc2af1c1b4bbf6d377feb89..3bb4451524a1ad931dc915eaa8dd94529b5c2a6d 100644 (file)
@@ -33,6 +33,8 @@ int main_prog(struct __sk_buff *skb)
        struct iphdr *ip = NULL;
        struct tcphdr *tcp;
        __u8 proto = 0;
+       int urg_ptr;
+       u32 offset;
 
        if (!(ip = get_iphdr(skb)))
                goto out;
@@ -48,7 +50,14 @@ int main_prog(struct __sk_buff *skb)
        if (!tcp)
                goto out;
 
-       return tcp->urg_ptr;
+       urg_ptr = tcp->urg_ptr;
+
+       /* Checksum validation part */
+       proto++;
+       offset = sizeof(struct ethhdr) + offsetof(struct iphdr, protocol);
+       bpf_skb_store_bytes(skb, offset, &proto, sizeof(proto), BPF_F_RECOMPUTE_CSUM);
+
+       return urg_ptr;
 out:
        return -1;
 }