diff options
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests/module_attach.c')
| -rw-r--r-- | tools/testing/selftests/bpf/prog_tests/module_attach.c | 35 | 
1 files changed, 35 insertions, 0 deletions
| diff --git a/tools/testing/selftests/bpf/prog_tests/module_attach.c b/tools/testing/selftests/bpf/prog_tests/module_attach.c index 1797a6e4d6d8..6d0e50dcf47c 100644 --- a/tools/testing/selftests/bpf/prog_tests/module_attach.c +++ b/tools/testing/selftests/bpf/prog_tests/module_attach.c @@ -2,10 +2,36 @@  /* Copyright (c) 2020 Facebook */  #include <test_progs.h> +#include <stdbool.h>  #include "test_module_attach.skel.h"  static int duration; +static int trigger_module_test_writable(int *val) +{ +	int fd, err; +	char buf[65]; +	ssize_t rd; + +	fd = open(BPF_TESTMOD_TEST_FILE, O_RDONLY); +	err = -errno; +	if (!ASSERT_GE(fd, 0, "testmode_file_open")) +		return err; + +	rd = read(fd, buf, sizeof(buf) - 1); +	err = -errno; +	if (!ASSERT_GT(rd, 0, "testmod_file_rd_val")) { +		close(fd); +		return err; +	} + +	buf[rd] = '\0'; +	*val = strtol(buf, NULL, 0); +	close(fd); + +	return 0; +} +  static int delete_module(const char *name, int flags)  {  	return syscall(__NR_delete_module, name, flags); @@ -19,6 +45,7 @@ void test_module_attach(void)  	struct test_module_attach__bss *bss;  	struct bpf_link *link;  	int err; +	int writable_val = 0;  	skel = test_module_attach__open();  	if (CHECK(!skel, "skel_open", "failed to open skeleton\n")) @@ -51,6 +78,14 @@ void test_module_attach(void)  	ASSERT_EQ(bss->fexit_ret, -EIO, "fexit_tet");  	ASSERT_EQ(bss->fmod_ret_read_sz, READ_SZ, "fmod_ret"); +	bss->raw_tp_writable_bare_early_ret = true; +	bss->raw_tp_writable_bare_out_val = 0xf1f2f3f4; +	ASSERT_OK(trigger_module_test_writable(&writable_val), +		  "trigger_writable"); +	ASSERT_EQ(bss->raw_tp_writable_bare_in_val, 1024, "writable_test_in"); +	ASSERT_EQ(bss->raw_tp_writable_bare_out_val, writable_val, +		  "writable_test_out"); +  	test_module_attach__detach(skel);  	/* attach fentry/fexit and make sure it get's module reference */ |