net: bpf: Switch over to memdup_user()
authorQing Wang <wangqing@vivo.com>
Mon, 18 Oct 2021 11:30:48 +0000 (04:30 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 21 Oct 2021 01:43:15 +0000 (18:43 -0700)
This patch fixes the following Coccinelle warning:

net/bpf/test_run.c:361:8-15: WARNING opportunity for memdup_user
net/bpf/test_run.c:1055:8-15: WARNING opportunity for memdup_user

Use memdup_user rather than duplicating its implementation
This is a little bit restricted to reduce false positives

Signed-off-by: Qing Wang <wangqing@vivo.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: John Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/bpf/1634556651-38702-1-git-send-email-wangqing@vivo.com
net/bpf/test_run.c

index 5296087..46dd957 100644 (file)
@@ -358,13 +358,9 @@ int bpf_prog_test_run_raw_tp(struct bpf_prog *prog,
                return -EINVAL;
 
        if (ctx_size_in) {
-               info.ctx = kzalloc(ctx_size_in, GFP_USER);
-               if (!info.ctx)
-                       return -ENOMEM;
-               if (copy_from_user(info.ctx, ctx_in, ctx_size_in)) {
-                       err = -EFAULT;
-                       goto out;
-               }
+               info.ctx = memdup_user(ctx_in, ctx_size_in);
+               if (IS_ERR(info.ctx))
+                       return PTR_ERR(info.ctx);
        } else {
                info.ctx = NULL;
        }
@@ -392,7 +388,6 @@ int bpf_prog_test_run_raw_tp(struct bpf_prog *prog,
            copy_to_user(&uattr->test.retval, &info.retval, sizeof(u32)))
                err = -EFAULT;
 
-out:
        kfree(info.ctx);
        return err;
 }
@@ -1052,13 +1047,9 @@ int bpf_prog_test_run_syscall(struct bpf_prog *prog,
                return -EINVAL;
 
        if (ctx_size_in) {
-               ctx = kzalloc(ctx_size_in, GFP_USER);
-               if (!ctx)
-                       return -ENOMEM;
-               if (copy_from_user(ctx, ctx_in, ctx_size_in)) {
-                       err = -EFAULT;
-                       goto out;
-               }
+               ctx = memdup_user(ctx_in, ctx_size_in);
+               if (IS_ERR(ctx))
+                       return PTR_ERR(ctx);
        }
 
        rcu_read_lock_trace();