diff options
-rw-r--r-- | kernel/bpf/syscall.c | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 70fb11106fc2..b7c585838c72 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c | |||
@@ -2272,33 +2272,25 @@ static int bpf_prog_get_info_by_fd(struct bpf_prog *prog, | |||
2272 | ulen = info.nr_func_info; | 2272 | ulen = info.nr_func_info; |
2273 | info.nr_func_info = prog->aux->func_info_cnt; | 2273 | info.nr_func_info = prog->aux->func_info_cnt; |
2274 | if (info.nr_func_info && ulen) { | 2274 | if (info.nr_func_info && ulen) { |
2275 | if (bpf_dump_raw_ok()) { | 2275 | char __user *user_finfo; |
2276 | char __user *user_finfo; | ||
2277 | 2276 | ||
2278 | user_finfo = u64_to_user_ptr(info.func_info); | 2277 | user_finfo = u64_to_user_ptr(info.func_info); |
2279 | ulen = min_t(u32, info.nr_func_info, ulen); | 2278 | ulen = min_t(u32, info.nr_func_info, ulen); |
2280 | if (copy_to_user(user_finfo, prog->aux->func_info, | 2279 | if (copy_to_user(user_finfo, prog->aux->func_info, |
2281 | info.func_info_rec_size * ulen)) | 2280 | info.func_info_rec_size * ulen)) |
2282 | return -EFAULT; | 2281 | return -EFAULT; |
2283 | } else { | ||
2284 | info.func_info = 0; | ||
2285 | } | ||
2286 | } | 2282 | } |
2287 | 2283 | ||
2288 | ulen = info.nr_line_info; | 2284 | ulen = info.nr_line_info; |
2289 | info.nr_line_info = prog->aux->nr_linfo; | 2285 | info.nr_line_info = prog->aux->nr_linfo; |
2290 | if (info.nr_line_info && ulen) { | 2286 | if (info.nr_line_info && ulen) { |
2291 | if (bpf_dump_raw_ok()) { | 2287 | __u8 __user *user_linfo; |
2292 | __u8 __user *user_linfo; | ||
2293 | 2288 | ||
2294 | user_linfo = u64_to_user_ptr(info.line_info); | 2289 | user_linfo = u64_to_user_ptr(info.line_info); |
2295 | ulen = min_t(u32, info.nr_line_info, ulen); | 2290 | ulen = min_t(u32, info.nr_line_info, ulen); |
2296 | if (copy_to_user(user_linfo, prog->aux->linfo, | 2291 | if (copy_to_user(user_linfo, prog->aux->linfo, |
2297 | info.line_info_rec_size * ulen)) | 2292 | info.line_info_rec_size * ulen)) |
2298 | return -EFAULT; | 2293 | return -EFAULT; |
2299 | } else { | ||
2300 | info.line_info = 0; | ||
2301 | } | ||
2302 | } | 2294 | } |
2303 | 2295 | ||
2304 | ulen = info.nr_jited_line_info; | 2296 | ulen = info.nr_jited_line_info; |