xref: /linux/tools/testing/selftests/bpf/progs/test_signed_loader_map.c (revision b2128290c29902315e632ea59e0504d6bc9e9b42)
1*5b88319eSDaniel Borkmann // SPDX-License-Identifier: GPL-2.0
2*5b88319eSDaniel Borkmann #include "vmlinux.h"
3*5b88319eSDaniel Borkmann #include <bpf/bpf_helpers.h>
4*5b88319eSDaniel Borkmann 
5*5b88319eSDaniel Borkmann /*
6*5b88319eSDaniel Borkmann  * One explicit array map and no global variables, so the generated loader
7*5b88319eSDaniel Borkmann  * has exactly one map to create (no .rodata/.bss). prog_tests/signed_loader.c
8*5b88319eSDaniel Borkmann  * uses this to check that a signed loader ignores ctx-supplied max_entries:
9*5b88319eSDaniel Borkmann  * the map must keep its attested size (4), not whatever the host puts in
10*5b88319eSDaniel Borkmann  * the loader ctx.
11*5b88319eSDaniel Borkmann  */
12*5b88319eSDaniel Borkmann struct {
13*5b88319eSDaniel Borkmann 	__uint(type, BPF_MAP_TYPE_ARRAY);
14*5b88319eSDaniel Borkmann 	__uint(max_entries, 4);
15*5b88319eSDaniel Borkmann 	__type(key, __u32);
16*5b88319eSDaniel Borkmann 	__type(value, __u64);
17*5b88319eSDaniel Borkmann } amap SEC(".maps");
18*5b88319eSDaniel Borkmann 
19*5b88319eSDaniel Borkmann SEC("socket")
20*5b88319eSDaniel Borkmann int probe(void *ctx)
21*5b88319eSDaniel Borkmann {
22*5b88319eSDaniel Borkmann 	__u32 key = 0;
23*5b88319eSDaniel Borkmann 	__u64 *val = bpf_map_lookup_elem(&amap, &key);
24*5b88319eSDaniel Borkmann 
25*5b88319eSDaniel Borkmann 	return val ? (int)*val : 0;
26*5b88319eSDaniel Borkmann }
27*5b88319eSDaniel Borkmann 
28*5b88319eSDaniel Borkmann char _license[] SEC("license") = "GPL";
29