bpf: Add a common helper bpf_copy_to_user()
authorYafang Shao <laoar.shao@gmail.com>
Sun, 9 Jul 2023 02:56:27 +0000 (02:56 +0000)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 12 Jul 2023 03:07:51 +0000 (20:07 -0700)
Add a common helper bpf_copy_to_user(), which will be used at multiple
places.
No functional change.

Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/r/20230709025630.3735-8-laoar.shao@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/syscall.c

index a2aef90..4aa6e57 100644 (file)
@@ -3295,6 +3295,25 @@ static void bpf_raw_tp_link_show_fdinfo(const struct bpf_link *link,
                   raw_tp_link->btp->tp->name);
 }
 
+static int bpf_copy_to_user(char __user *ubuf, const char *buf, u32 ulen,
+                           u32 len)
+{
+       if (ulen >= len + 1) {
+               if (copy_to_user(ubuf, buf, len + 1))
+                       return -EFAULT;
+       } else {
+               char zero = '\0';
+
+               if (copy_to_user(ubuf, buf, ulen - 1))
+                       return -EFAULT;
+               if (put_user(zero, ubuf + ulen - 1))
+                       return -EFAULT;
+               return -ENOSPC;
+       }
+
+       return 0;
+}
+
 static int bpf_raw_tp_link_fill_link_info(const struct bpf_link *link,
                                          struct bpf_link_info *info)
 {
@@ -3313,20 +3332,7 @@ static int bpf_raw_tp_link_fill_link_info(const struct bpf_link *link,
        if (!ubuf)
                return 0;
 
-       if (ulen >= tp_len + 1) {
-               if (copy_to_user(ubuf, tp_name, tp_len + 1))
-                       return -EFAULT;
-       } else {
-               char zero = '\0';
-
-               if (copy_to_user(ubuf, tp_name, ulen - 1))
-                       return -EFAULT;
-               if (put_user(zero, ubuf + ulen - 1))
-                       return -EFAULT;
-               return -ENOSPC;
-       }
-
-       return 0;
+       return bpf_copy_to_user(ubuf, tp_name, ulen, tp_len);
 }
 
 static const struct bpf_link_ops bpf_raw_tp_link_lops = {