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 char _license[] SEC("license") = "GPL"; 15 16 __u32 monitored_pid; 17 __u32 key_serial; 18 __u32 key_id; 19 __u64 flags; 20 21 extern struct bpf_key *bpf_lookup_user_key(__u32 serial, __u64 flags) __ksym; 22 extern struct bpf_key *bpf_lookup_system_key(__u64 id) __ksym; 23 extern void bpf_key_put(struct bpf_key *key) __ksym; 24 25 SEC("lsm.s/bpf") 26 int 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