mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
Merge branch 'bpf-mm-related-minor-changes'
Yafang Shao says: ==================== These two minor patches were developed during the implementation of BPF-THP: https://lwn.net/Articles/1042138/ As suggested by Andrii, they are being submitted separately. ==================== Link: https://patch.msgid.link/20251016063929.13830-1-laoar.shao@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
commit
7a9f475d52
|
|
@ -7054,6 +7054,9 @@ BTF_TYPE_SAFE_RCU(struct cgroup_subsys_state) {
|
|||
/* RCU trusted: these fields are trusted in RCU CS and can be NULL */
|
||||
BTF_TYPE_SAFE_RCU_OR_NULL(struct mm_struct) {
|
||||
struct file __rcu *exe_file;
|
||||
#ifdef CONFIG_MEMCG
|
||||
struct task_struct __rcu *owner;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* skb->sk, req->sk are not RCU protected, but we mark them as such
|
||||
|
|
@ -7093,6 +7096,11 @@ BTF_TYPE_SAFE_TRUSTED_OR_NULL(struct socket) {
|
|||
struct sock *sk;
|
||||
};
|
||||
|
||||
BTF_TYPE_SAFE_TRUSTED_OR_NULL(struct vm_area_struct) {
|
||||
struct mm_struct *vm_mm;
|
||||
struct file *vm_file;
|
||||
};
|
||||
|
||||
static bool type_is_rcu(struct bpf_verifier_env *env,
|
||||
struct bpf_reg_state *reg,
|
||||
const char *field_name, u32 btf_id)
|
||||
|
|
@ -7134,6 +7142,7 @@ static bool type_is_trusted_or_null(struct bpf_verifier_env *env,
|
|||
{
|
||||
BTF_TYPE_EMIT(BTF_TYPE_SAFE_TRUSTED_OR_NULL(struct socket));
|
||||
BTF_TYPE_EMIT(BTF_TYPE_SAFE_TRUSTED_OR_NULL(struct dentry));
|
||||
BTF_TYPE_EMIT(BTF_TYPE_SAFE_TRUSTED_OR_NULL(struct vm_area_struct));
|
||||
|
||||
return btf_nested_type_is_trusted(&env->log, reg, field_name, btf_id,
|
||||
"__safe_trusted_or_null");
|
||||
|
|
|
|||
|
|
@ -89,14 +89,16 @@ SEC("lsm/file_mprotect")
|
|||
int BPF_PROG(test_int_hook, struct vm_area_struct *vma,
|
||||
unsigned long reqprot, unsigned long prot, int ret)
|
||||
{
|
||||
if (ret != 0)
|
||||
struct mm_struct *mm = vma->vm_mm;
|
||||
|
||||
if (ret != 0 || !mm)
|
||||
return ret;
|
||||
|
||||
__s32 pid = bpf_get_current_pid_tgid() >> 32;
|
||||
int is_stack = 0;
|
||||
|
||||
is_stack = (vma->vm_start <= vma->vm_mm->start_stack &&
|
||||
vma->vm_end >= vma->vm_mm->start_stack);
|
||||
is_stack = (vma->vm_start <= mm->start_stack &&
|
||||
vma->vm_end >= mm->start_stack);
|
||||
|
||||
if (is_stack && monitored_pid == pid) {
|
||||
mprotect_count++;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user