brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · 8466332 Raw
63 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <test_progs.h>3 4void test_global_data_init(void)5{6	const char *file = "./test_global_data.bpf.o";7	int err = -ENOMEM, map_fd, zero = 0;8	__u8 *buff = NULL, *newval = NULL;9	struct bpf_object *obj;10	struct bpf_map *map;11        __u32 duration = 0;12	size_t sz;13 14	obj = bpf_object__open_file(file, NULL);15	err = libbpf_get_error(obj);16	if (CHECK_FAIL(err))17		return;18 19	map = bpf_object__find_map_by_name(obj, ".rodata");20	if (CHECK_FAIL(!map || !bpf_map__is_internal(map)))21		goto out;22 23	sz = bpf_map__value_size(map);24	newval = malloc(sz);25	if (CHECK_FAIL(!newval))26		goto out;27 28	memset(newval, 0, sz);29	/* wrong size, should fail */30	err = bpf_map__set_initial_value(map, newval, sz - 1);31	if (CHECK(!err, "reject set initial value wrong size", "err %d\n", err))32		goto out;33 34	err = bpf_map__set_initial_value(map, newval, sz);35	if (CHECK(err, "set initial value", "err %d\n", err))36		goto out;37 38	err = bpf_object__load(obj);39	if (CHECK_FAIL(err))40		goto out;41 42	map_fd = bpf_map__fd(map);43	if (CHECK_FAIL(map_fd < 0))44		goto out;45 46	buff = malloc(sz);47	if (buff)48		err = bpf_map_lookup_elem(map_fd, &zero, buff);49	if (CHECK(!buff || err || memcmp(buff, newval, sz),50		  "compare .rodata map data override",51		  "err %d errno %d\n", err, errno))52		goto out;53 54	memset(newval, 1, sz);55	/* object loaded - should fail */56	err = bpf_map__set_initial_value(map, newval, sz);57	CHECK(!err, "reject set initial value after load", "err %d\n", err);58out:59	free(buff);60	free(newval);61	bpf_object__close(obj);62}63