bpf: Remove bpf_dump_raw_ok() check for func_info and line_info
authorMartin KaFai Lau <kafai@fb.com>
Wed, 12 Dec 2018 18:18:21 +0000 (10:18 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Thu, 13 Dec 2018 11:16:30 +0000 (12:16 +0100)
The func_info and line_info have the bpf insn offset but
they do not contain kernel address.  They will still be useful
for the userspace tool to annotate the xlated insn.

This patch removes the bpf_dump_raw_ok() guard for the
func_info and line_info during bpf_prog_get_info_by_fd().

The guard stays for jited_line_info which contains the kernel
address.

Although this bpf_dump_raw_ok() guard behavior has started since
the earlier func_info patch series, I marked the Fixes tag to the
latest line_info patch series which contains both func_info and
line_info and this patch is fixing for both of them.

Fixes: c454a46b5efd ("bpf: Add bpf_line_info support")
Signed-off-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
kernel/bpf/syscall.c

index 70fb11106fc2c29731f1364764928375bcbad39c..b7c585838c723e25cbd1d2b352973a5b634590bd 100644 (file)
@@ -2272,33 +2272,25 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog,
        ulen = info.nr_func_info;
        info.nr_func_info = prog->aux->func_info_cnt;
        if (info.nr_func_info && ulen) {
-               if (bpf_dump_raw_ok()) {
-                       char __user *user_finfo;
+               char __user *user_finfo;
 
-                       user_finfo = u64_to_user_ptr(info.func_info);
-                       ulen = min_t(u32, info.nr_func_info, ulen);
-                       if (copy_to_user(user_finfo, prog->aux->func_info,
-                                        info.func_info_rec_size * ulen))
-                               return -EFAULT;
-               } else {
-                       info.func_info = 0;
-               }
+               user_finfo = u64_to_user_ptr(info.func_info);
+               ulen = min_t(u32, info.nr_func_info, ulen);
+               if (copy_to_user(user_finfo, prog->aux->func_info,
+                                info.func_info_rec_size * ulen))
+                       return -EFAULT;
        }
 
        ulen = info.nr_line_info;
        info.nr_line_info = prog->aux->nr_linfo;
        if (info.nr_line_info && ulen) {
-               if (bpf_dump_raw_ok()) {
-                       __u8 __user *user_linfo;
+               __u8 __user *user_linfo;
 
-                       user_linfo = u64_to_user_ptr(info.line_info);
-                       ulen = min_t(u32, info.nr_line_info, ulen);
-                       if (copy_to_user(user_linfo, prog->aux->linfo,
-                                        info.line_info_rec_size * ulen))
-                               return -EFAULT;
-               } else {
-                       info.line_info = 0;
-               }
+               user_linfo = u64_to_user_ptr(info.line_info);
+               ulen = min_t(u32, info.nr_line_info, ulen);
+               if (copy_to_user(user_linfo, prog->aux->linfo,
+                                info.line_info_rec_size * ulen))
+                       return -EFAULT;
        }
 
        ulen = info.nr_jited_line_info;