cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

cgroup_attach_override.c (4244B)


      1// SPDX-License-Identifier: GPL-2.0
      2
      3#include <test_progs.h>
      4
      5#include "cgroup_helpers.h"
      6
      7#define FOO		"/foo"
      8#define BAR		"/foo/bar/"
      9#define PING_CMD	"ping -q -c1 -w1 127.0.0.1 > /dev/null"
     10
     11static char bpf_log_buf[BPF_LOG_BUF_SIZE];
     12
     13static int prog_load(int verdict)
     14{
     15	struct bpf_insn prog[] = {
     16		BPF_MOV64_IMM(BPF_REG_0, verdict), /* r0 = verdict */
     17		BPF_EXIT_INSN(),
     18	};
     19	size_t insns_cnt = ARRAY_SIZE(prog);
     20
     21	return bpf_test_load_program(BPF_PROG_TYPE_CGROUP_SKB,
     22			       prog, insns_cnt, "GPL", 0,
     23			       bpf_log_buf, BPF_LOG_BUF_SIZE);
     24}
     25
     26void serial_test_cgroup_attach_override(void)
     27{
     28	int drop_prog = -1, allow_prog = -1, foo = -1, bar = -1;
     29	__u32 duration = 0;
     30
     31	allow_prog = prog_load(1);
     32	if (CHECK(allow_prog < 0, "prog_load_allow",
     33		  "verifier output:\n%s\n-------\n", bpf_log_buf))
     34		goto err;
     35
     36	drop_prog = prog_load(0);
     37	if (CHECK(drop_prog < 0, "prog_load_drop",
     38		  "verifier output:\n%s\n-------\n", bpf_log_buf))
     39		goto err;
     40
     41	foo = test__join_cgroup(FOO);
     42	if (CHECK(foo < 0, "cgroup_join_foo", "cgroup setup failed\n"))
     43		goto err;
     44
     45	if (CHECK(bpf_prog_attach(drop_prog, foo, BPF_CGROUP_INET_EGRESS,
     46				  BPF_F_ALLOW_OVERRIDE),
     47		  "prog_attach_drop_foo_override",
     48		  "attach prog to %s failed, errno=%d\n", FOO, errno))
     49		goto err;
     50
     51	if (CHECK(!system(PING_CMD), "ping_fail",
     52		  "ping unexpectedly succeeded\n"))
     53		goto err;
     54
     55	bar = test__join_cgroup(BAR);
     56	if (CHECK(bar < 0, "cgroup_join_bar", "cgroup setup failed\n"))
     57		goto err;
     58
     59	if (CHECK(!system(PING_CMD), "ping_fail",
     60		  "ping unexpectedly succeeded\n"))
     61		goto err;
     62
     63	if (CHECK(bpf_prog_attach(allow_prog, bar, BPF_CGROUP_INET_EGRESS,
     64				  BPF_F_ALLOW_OVERRIDE),
     65		  "prog_attach_allow_bar_override",
     66		  "attach prog to %s failed, errno=%d\n", BAR, errno))
     67		goto err;
     68
     69	if (CHECK(system(PING_CMD), "ping_ok", "ping failed\n"))
     70		goto err;
     71
     72	if (CHECK(bpf_prog_detach(bar, BPF_CGROUP_INET_EGRESS),
     73		  "prog_detach_bar",
     74		  "detach prog from %s failed, errno=%d\n", BAR, errno))
     75		goto err;
     76
     77	if (CHECK(!system(PING_CMD), "ping_fail",
     78		  "ping unexpectedly succeeded\n"))
     79		goto err;
     80
     81	if (CHECK(bpf_prog_attach(allow_prog, bar, BPF_CGROUP_INET_EGRESS,
     82				  BPF_F_ALLOW_OVERRIDE),
     83		  "prog_attach_allow_bar_override",
     84		  "attach prog to %s failed, errno=%d\n", BAR, errno))
     85		goto err;
     86
     87	if (CHECK(bpf_prog_detach(foo, BPF_CGROUP_INET_EGRESS),
     88		  "prog_detach_foo",
     89		  "detach prog from %s failed, errno=%d\n", FOO, errno))
     90		goto err;
     91
     92	if (CHECK(system(PING_CMD), "ping_ok", "ping failed\n"))
     93		goto err;
     94
     95	if (CHECK(bpf_prog_attach(allow_prog, bar, BPF_CGROUP_INET_EGRESS,
     96				  BPF_F_ALLOW_OVERRIDE),
     97		  "prog_attach_allow_bar_override",
     98		  "attach prog to %s failed, errno=%d\n", BAR, errno))
     99		goto err;
    100
    101	if (CHECK(!bpf_prog_attach(allow_prog, bar, BPF_CGROUP_INET_EGRESS, 0),
    102		  "fail_prog_attach_allow_bar_none",
    103		  "attach prog to %s unexpectedly succeeded\n", BAR))
    104		goto err;
    105
    106	if (CHECK(bpf_prog_detach(bar, BPF_CGROUP_INET_EGRESS),
    107		  "prog_detach_bar",
    108		  "detach prog from %s failed, errno=%d\n", BAR, errno))
    109		goto err;
    110
    111	if (CHECK(!bpf_prog_detach(foo, BPF_CGROUP_INET_EGRESS),
    112		  "fail_prog_detach_foo",
    113		  "double detach from %s unexpectedly succeeded\n", FOO))
    114		goto err;
    115
    116	if (CHECK(bpf_prog_attach(allow_prog, foo, BPF_CGROUP_INET_EGRESS, 0),
    117		  "prog_attach_allow_foo_none",
    118		  "attach prog to %s failed, errno=%d\n", FOO, errno))
    119		goto err;
    120
    121	if (CHECK(!bpf_prog_attach(allow_prog, bar, BPF_CGROUP_INET_EGRESS, 0),
    122		  "fail_prog_attach_allow_bar_none",
    123		  "attach prog to %s unexpectedly succeeded\n", BAR))
    124		goto err;
    125
    126	if (CHECK(!bpf_prog_attach(allow_prog, bar, BPF_CGROUP_INET_EGRESS,
    127				   BPF_F_ALLOW_OVERRIDE),
    128		  "fail_prog_attach_allow_bar_override",
    129		  "attach prog to %s unexpectedly succeeded\n", BAR))
    130		goto err;
    131
    132	if (CHECK(!bpf_prog_attach(allow_prog, foo, BPF_CGROUP_INET_EGRESS,
    133				   BPF_F_ALLOW_OVERRIDE),
    134		  "fail_prog_attach_allow_foo_override",
    135		  "attach prog to %s unexpectedly succeeded\n", FOO))
    136		goto err;
    137
    138	if (CHECK(bpf_prog_attach(drop_prog, foo, BPF_CGROUP_INET_EGRESS, 0),
    139		  "prog_attach_drop_foo_none",
    140		  "attach prog to %s failed, errno=%d\n", FOO, errno))
    141		goto err;
    142
    143err:
    144	close(foo);
    145	close(bar);
    146	close(allow_prog);
    147	close(drop_prog);
    148}