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 14char _license[] SEC("license") = "GPL"; 15 16__u32 monitored_pid; 17__u32 key_serial; 18__u32 key_id; 19__u64 flags; 20 21extern struct bpf_key *bpf_lookup_user_key(__u32 serial, __u64 flags) __ksym; 22extern struct bpf_key *bpf_lookup_system_key(__u64 id) __ksym; 23extern void bpf_key_put(struct bpf_key *key) __ksym; 24 25SEC("lsm.s/bpf") 26int BPF_PROG(bpf, int cmd, union bpf_attr *attr, unsigned int size) 27{ 28 struct bpf_key *bkey; 29 __u32 pid; 30 31 pid = bpf_get_current_pid_tgid() >> 32; 32 if (pid != monitored_pid) 33 return 0; 34 35 if (key_serial) 36 bkey = bpf_lookup_user_key(key_serial, flags); 37 else 38 bkey = bpf_lookup_system_key(key_id); 39 40 if (!bkey) 41 return -ENOENT; 42 43 bpf_key_put(bkey); 44 45 return 0; 46} 47