|
@@ -8171,6 +8171,7 @@ static int perf_event_set_bpf_prog(struct perf_event *event, u32 prog_fd)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
event->tp_event->prog = prog;
|
|
event->tp_event->prog = prog;
|
|
|
|
+ event->tp_event->bpf_prog_owner = event;
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -8185,7 +8186,7 @@ static void perf_event_free_bpf_prog(struct perf_event *event)
|
|
return;
|
|
return;
|
|
|
|
|
|
prog = event->tp_event->prog;
|
|
prog = event->tp_event->prog;
|
|
- if (prog) {
|
|
|
|
|
|
+ if (prog && event->tp_event->bpf_prog_owner == event) {
|
|
event->tp_event->prog = NULL;
|
|
event->tp_event->prog = NULL;
|
|
bpf_prog_put(prog);
|
|
bpf_prog_put(prog);
|
|
}
|
|
}
|