1// SPDX-License-Identifier: GPL-2.0
2
3/*
4 * Copyright (C) 2022 Huawei Technologies Duesseldorf GmbH
5 *
6 * Author: Roberto Sassu <roberto.sassu@huawei.com>
7 */
8
9#include "vmlinux.h"
10#include <errno.h>
11#include <bpf/bpf_helpers.h>
12#include <bpf/bpf_tracing.h>
13
14/* From include/linux/mm.h. */
15#define FMODE_WRITE 0x2
16
17struct {
18 __uint(type, BPF_MAP_TYPE_ARRAY);
19 __uint(max_entries, 1);
20 __type(key, __u32);
21 __type(value, __u32);
22} data_input SEC(".maps");
23
24char _license[] SEC("license") = "GPL";
25
26SEC("lsm/bpf_map")
27int BPF_PROG(check_access, struct bpf_map *map, fmode_t fmode)
28{
29 if (map != (struct bpf_map *)&data_input)
30 return 0;
31
32 if (fmode & FMODE_WRITE)
33 return -EACCES;
34
35 return 0;
36}
37

source code of linux/tools/testing/selftests/bpf/progs/test_libbpf_get_fd_by_id_opts.c