Commit faeb2dce authored by Alexei Starovoitov's avatar Alexei Starovoitov Committed by Daniel Borkmann
Browse files

bpf: Add kernel test functions for fentry testing



Add few kernel functions with various number of arguments,
their types and sizes for BPF trampoline testing to cover
different calling conventions.

Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarSong Liu <songliubraving@fb.com>
Link: https://lore.kernel.org/bpf/20191114185720.1641606-9-ast@kernel.org
parent e41074d3
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -105,6 +105,40 @@ out:
	return err;
}

/* Integer types of various sizes and pointer combinations cover variety of
 * architecture dependent calling conventions. 7+ can be supported in the
 * future.
 */
int noinline bpf_fentry_test1(int a)
{
	return a + 1;
}

int noinline bpf_fentry_test2(int a, u64 b)
{
	return a + b;
}

int noinline bpf_fentry_test3(char a, int b, u64 c)
{
	return a + b + c;
}

int noinline bpf_fentry_test4(void *a, char b, int c, u64 d)
{
	return (long)a + b + c + d;
}

int noinline bpf_fentry_test5(u64 a, void *b, short c, int d, u64 e)
{
	return a + (long)b + c + d + e;
}

int noinline bpf_fentry_test6(u64 a, void *b, short c, int d, void *e, u64 f)
{
	return a + (long)b + c + d + (long)e + f;
}

static void *bpf_test_init(const union bpf_attr *kattr, u32 size,
			   u32 headroom, u32 tailroom)
{
@@ -122,6 +156,13 @@ static void *bpf_test_init(const union bpf_attr *kattr, u32 size,
		kfree(data);
		return ERR_PTR(-EFAULT);
	}
	if (bpf_fentry_test1(1) != 2 ||
	    bpf_fentry_test2(2, 3) != 5 ||
	    bpf_fentry_test3(4, 5, 6) != 15 ||
	    bpf_fentry_test4((void *)7, 8, 9, 10) != 34 ||
	    bpf_fentry_test5(11, (void *)12, 13, 14, 15) != 65 ||
	    bpf_fentry_test6(16, (void *)17, 18, 19, (void *)20, 21) != 111)
		return ERR_PTR(-EFAULT);
	return data;
}