]> Git Repo - linux.git/blob - tools/testing/selftests/bpf/progs/strncmp_test.c
Linux 6.14-rc3
[linux.git] / tools / testing / selftests / bpf / progs / strncmp_test.c
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (C) 2021. Huawei Technologies Co., Ltd */
3 #include <stdbool.h>
4 #include <linux/types.h>
5 #include <linux/bpf.h>
6 #include <bpf/bpf_helpers.h>
7 #include <bpf/bpf_tracing.h>
8
9 #define STRNCMP_STR_SZ 8
10
11 const char target[STRNCMP_STR_SZ] = "EEEEEEE";
12 char str[STRNCMP_STR_SZ];
13 int cmp_ret = 0;
14 int target_pid = 0;
15
16 const char no_str_target[STRNCMP_STR_SZ] = "12345678";
17 char writable_target[STRNCMP_STR_SZ];
18 unsigned int no_const_str_size = STRNCMP_STR_SZ;
19
20 char _license[] SEC("license") = "GPL";
21
22 SEC("?tp/syscalls/sys_enter_nanosleep")
23 int do_strncmp(void *ctx)
24 {
25         if ((bpf_get_current_pid_tgid() >> 32) != target_pid)
26                 return 0;
27
28         cmp_ret = bpf_strncmp(str, STRNCMP_STR_SZ, target);
29         return 0;
30 }
31
32 SEC("?tp/syscalls/sys_enter_nanosleep")
33 int strncmp_bad_not_const_str_size(void *ctx)
34 {
35         /* The value of string size is not const, so will fail */
36         cmp_ret = bpf_strncmp(str, no_const_str_size, target);
37         return 0;
38 }
39
40 SEC("?tp/syscalls/sys_enter_nanosleep")
41 int strncmp_bad_writable_target(void *ctx)
42 {
43         /* Compared target is not read-only, so will fail */
44         cmp_ret = bpf_strncmp(str, STRNCMP_STR_SZ, writable_target);
45         return 0;
46 }
47
48 SEC("?tp/syscalls/sys_enter_nanosleep")
49 int strncmp_bad_not_null_term_target(void *ctx)
50 {
51         /* Compared target is not null-terminated, so will fail */
52         cmp_ret = bpf_strncmp(str, STRNCMP_STR_SZ, no_str_target);
53         return 0;
54 }
This page took 0.034252 seconds and 4 git commands to generate.