Merge tag 'sched-urgent-2024-06-02' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.git] / kernel / trace / bpf_trace.c
index f5154c051d2c105dea6d42735872a34a8d41150c..6249dac61701834be8a6b8619945560b7bafa8ed 100644 (file)
@@ -3295,7 +3295,7 @@ static int uprobe_prog_run(struct bpf_uprobe *uprobe,
        struct bpf_run_ctx *old_run_ctx;
        int err = 0;
 
-       if (link->task && current != link->task)
+       if (link->task && current->mm != link->task->mm)
                return 0;
 
        if (sleepable)
@@ -3396,8 +3396,9 @@ int bpf_uprobe_multi_link_attach(const union bpf_attr *attr, struct bpf_prog *pr
        upath = u64_to_user_ptr(attr->link_create.uprobe_multi.path);
        uoffsets = u64_to_user_ptr(attr->link_create.uprobe_multi.offsets);
        cnt = attr->link_create.uprobe_multi.cnt;
+       pid = attr->link_create.uprobe_multi.pid;
 
-       if (!upath || !uoffsets || !cnt)
+       if (!upath || !uoffsets || !cnt || pid < 0)
                return -EINVAL;
        if (cnt > MAX_UPROBE_MULTI_CNT)
                return -E2BIG;
@@ -3421,11 +3422,8 @@ int bpf_uprobe_multi_link_attach(const union bpf_attr *attr, struct bpf_prog *pr
                goto error_path_put;
        }
 
-       pid = attr->link_create.uprobe_multi.pid;
        if (pid) {
-               rcu_read_lock();
-               task = get_pid_task(find_vpid(pid), PIDTYPE_PID);
-               rcu_read_unlock();
+               task = get_pid_task(find_vpid(pid), PIDTYPE_TGID);
                if (!task) {
                        err = -ESRCH;
                        goto error_path_put;