Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at master 103 lines 2.1 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2/* Copyright (c) 2024 Google LLC. */ 3 4#include <vmlinux.h> 5#include <errno.h> 6#include <bpf/bpf_helpers.h> 7#include <bpf/bpf_tracing.h> 8 9#include "bpf_misc.h" 10#include "bpf_experimental.h" 11 12static char buf[64]; 13 14SEC("lsm.s/file_open") 15__success 16int BPF_PROG(get_task_exe_file_and_put_kfunc_from_current_sleepable) 17{ 18 struct file *acquired; 19 20 acquired = bpf_get_task_exe_file(bpf_get_current_task_btf()); 21 if (!acquired) 22 return 0; 23 24 bpf_put_file(acquired); 25 return 0; 26} 27 28SEC("lsm/file_open") 29__success 30int BPF_PROG(get_task_exe_file_and_put_kfunc_from_current_non_sleepable, struct file *file) 31{ 32 struct file *acquired; 33 34 acquired = bpf_get_task_exe_file(bpf_get_current_task_btf()); 35 if (!acquired) 36 return 0; 37 38 bpf_put_file(acquired); 39 return 0; 40} 41 42SEC("lsm.s/task_alloc") 43__success 44int BPF_PROG(get_task_exe_file_and_put_kfunc_from_argument, 45 struct task_struct *task) 46{ 47 struct file *acquired; 48 49 acquired = bpf_get_task_exe_file(task); 50 if (!acquired) 51 return 0; 52 53 bpf_put_file(acquired); 54 return 0; 55} 56 57SEC("lsm.s/inode_getattr") 58__success 59int BPF_PROG(path_d_path_from_path_argument, struct path *path) 60{ 61 int ret; 62 63 ret = bpf_path_d_path(path, buf, sizeof(buf)); 64 __sink(ret); 65 return 0; 66} 67 68SEC("lsm.s/file_open") 69__success 70int BPF_PROG(path_d_path_from_file_argument, struct file *file) 71{ 72 int ret; 73 const struct path *path; 74 75 /* The f_path member is a path which is embedded directly within a 76 * file. Therefore, a pointer to such embedded members are still 77 * recognized by the BPF verifier as being PTR_TRUSTED as it's 78 * essentially PTR_TRUSTED w/ a non-zero fixed offset. 79 */ 80 path = &file->f_path; 81 ret = bpf_path_d_path(path, buf, sizeof(buf)); 82 __sink(ret); 83 return 0; 84} 85 86SEC("lsm.s/inode_rename") 87__success 88int BPF_PROG(inode_rename, struct inode *old_dir, struct dentry *old_dentry, 89 struct inode *new_dir, struct dentry *new_dentry, 90 unsigned int flags) 91{ 92 struct inode *inode = new_dentry->d_inode; 93 ino_t ino; 94 95 if (!inode) 96 return 0; 97 ino = inode->i_ino; 98 if (ino == 0) 99 return -EACCES; 100 return 0; 101} 102 103char _license[] SEC("license") = "GPL";