2019-11-14 18:57:10 +00:00
|
|
|
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
/* Copyright (c) 2019 Facebook */
|
|
|
|
#include <test_progs.h>
|
2020-03-04 19:18:52 +00:00
|
|
|
#include "fexit_test.skel.h"
|
2019-11-14 18:57:10 +00:00
|
|
|
|
2021-04-14 19:51:44 +00:00
|
|
|
static int fexit_test(struct fexit_test *fexit_skel)
|
2019-11-14 18:57:10 +00:00
|
|
|
{
|
2020-03-04 19:18:52 +00:00
|
|
|
int err, prog_fd, i;
|
selftests/bpf: Initialize duration variable before using
The 'duration' variable is referenced in the CHECK() macro, and there are
some uses of the macro before 'duration' is set. The clang compiler
(validly) complains about this.
Sample error:
.../selftests/bpf/prog_tests/fexit_test.c:23:6: warning: variable 'duration' is uninitialized when used here [-Wuninitialized]
if (CHECK(err, "prog_load sched cls", "err %d errno %d\n", err, errno))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.../selftests/bpf/test_progs.h:134:25: note: expanded from macro 'CHECK'
if (CHECK(err, "prog_load sched cls", "err %d errno %d\n", err, errno))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_CHECK(condition, tag, duration, format)
^~~~~~~~
Signed-off-by: John Sperbeck <jsperbeck@google.com>
Signed-off-by: Stanislav Fomichev <sdf@google.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/20200123235144.93610-1-sdf@google.com
2020-01-23 23:51:44 +00:00
|
|
|
__u32 duration = 0, retval;
|
2021-04-14 19:51:44 +00:00
|
|
|
struct bpf_link *link;
|
2020-03-04 19:18:52 +00:00
|
|
|
__u64 *result;
|
2019-11-14 18:57:10 +00:00
|
|
|
|
2020-03-04 19:18:52 +00:00
|
|
|
err = fexit_test__attach(fexit_skel);
|
2021-04-14 19:51:44 +00:00
|
|
|
if (!ASSERT_OK(err, "fexit_attach"))
|
|
|
|
return err;
|
|
|
|
|
|
|
|
/* Check that already linked program can't be attached again. */
|
|
|
|
link = bpf_program__attach(fexit_skel->progs.test1);
|
|
|
|
if (!ASSERT_ERR_PTR(link, "fexit_attach_link"))
|
|
|
|
return -1;
|
2019-11-14 18:57:10 +00:00
|
|
|
|
2020-03-04 19:18:52 +00:00
|
|
|
prog_fd = bpf_program__fd(fexit_skel->progs.test1);
|
|
|
|
err = bpf_prog_test_run(prog_fd, 1, NULL, 0,
|
2019-11-14 18:57:10 +00:00
|
|
|
NULL, NULL, &retval, &duration);
|
2021-04-14 19:51:44 +00:00
|
|
|
ASSERT_OK(err, "test_run");
|
|
|
|
ASSERT_EQ(retval, 0, "test_run");
|
2019-11-14 18:57:10 +00:00
|
|
|
|
2020-03-04 19:18:52 +00:00
|
|
|
result = (__u64 *)fexit_skel->bss;
|
2021-04-14 19:51:44 +00:00
|
|
|
for (i = 0; i < sizeof(*fexit_skel->bss) / sizeof(__u64); i++) {
|
|
|
|
if (!ASSERT_EQ(result[i], 1, "fexit_result"))
|
|
|
|
return -1;
|
2020-03-04 19:18:52 +00:00
|
|
|
}
|
2019-11-14 18:57:10 +00:00
|
|
|
|
2021-04-14 19:51:44 +00:00
|
|
|
fexit_test__detach(fexit_skel);
|
|
|
|
|
|
|
|
/* zero results for re-attach test */
|
|
|
|
memset(fexit_skel->bss, 0, sizeof(*fexit_skel->bss));
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void test_fexit_test(void)
|
|
|
|
{
|
|
|
|
struct fexit_test *fexit_skel = NULL;
|
|
|
|
int err;
|
|
|
|
|
|
|
|
fexit_skel = fexit_test__open_and_load();
|
|
|
|
if (!ASSERT_OK_PTR(fexit_skel, "fexit_skel_load"))
|
|
|
|
goto cleanup;
|
|
|
|
|
|
|
|
err = fexit_test(fexit_skel);
|
|
|
|
if (!ASSERT_OK(err, "fexit_first_attach"))
|
|
|
|
goto cleanup;
|
|
|
|
|
|
|
|
err = fexit_test(fexit_skel);
|
|
|
|
ASSERT_OK(err, "fexit_second_attach");
|
|
|
|
|
2020-03-04 19:18:52 +00:00
|
|
|
cleanup:
|
|
|
|
fexit_test__destroy(fexit_skel);
|
2019-11-14 18:57:10 +00:00
|
|
|
}
|