summaryrefslogtreecommitdiffstats
path: root/kernel/bpf/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/bpf/inode.c')
-rw-r--r--kernel/bpf/inode.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c
index 0b030c9126d3..fddcae801724 100644
--- a/kernel/bpf/inode.c
+++ b/kernel/bpf/inode.c
@@ -21,6 +21,7 @@
21#include <linux/parser.h> 21#include <linux/parser.h>
22#include <linux/filter.h> 22#include <linux/filter.h>
23#include <linux/bpf.h> 23#include <linux/bpf.h>
24#include <linux/bpf_trace.h>
24 25
25enum bpf_type { 26enum bpf_type {
26 BPF_TYPE_UNSPEC = 0, 27 BPF_TYPE_UNSPEC = 0,
@@ -281,6 +282,13 @@ int bpf_obj_pin_user(u32 ufd, const char __user *pathname)
281 ret = bpf_obj_do_pin(pname, raw, type); 282 ret = bpf_obj_do_pin(pname, raw, type);
282 if (ret != 0) 283 if (ret != 0)
283 bpf_any_put(raw, type); 284 bpf_any_put(raw, type);
285 if ((trace_bpf_obj_pin_prog_enabled() ||
286 trace_bpf_obj_pin_map_enabled()) && !ret) {
287 if (type == BPF_TYPE_PROG)
288 trace_bpf_obj_pin_prog(raw, ufd, pname);
289 if (type == BPF_TYPE_MAP)
290 trace_bpf_obj_pin_map(raw, ufd, pname);
291 }
284out: 292out:
285 putname(pname); 293 putname(pname);
286 return ret; 294 return ret;
@@ -342,8 +350,15 @@ int bpf_obj_get_user(const char __user *pathname)
342 else 350 else
343 goto out; 351 goto out;
344 352
345 if (ret < 0) 353 if (ret < 0) {
346 bpf_any_put(raw, type); 354 bpf_any_put(raw, type);
355 } else if (trace_bpf_obj_get_prog_enabled() ||
356 trace_bpf_obj_get_map_enabled()) {
357 if (type == BPF_TYPE_PROG)
358 trace_bpf_obj_get_prog(raw, ret, pname);
359 if (type == BPF_TYPE_MAP)
360 trace_bpf_obj_get_map(raw, ret, pname);
361 }
347out: 362out:
348 putname(pname); 363 putname(pname);
349 return ret; 364 return ret;