|
@@ -769,20 +769,19 @@ int perf_event_attach_bpf_prog(struct perf_event *event,
|
|
|
mutex_lock(&bpf_event_mutex);
|
|
|
|
|
|
if (event->prog)
|
|
|
- goto out;
|
|
|
+ goto unlock;
|
|
|
|
|
|
- old_array = rcu_dereference_protected(event->tp_event->prog_array,
|
|
|
- lockdep_is_held(&bpf_event_mutex));
|
|
|
+ old_array = event->tp_event->prog_array;
|
|
|
ret = bpf_prog_array_copy(old_array, NULL, prog, &new_array);
|
|
|
if (ret < 0)
|
|
|
- goto out;
|
|
|
+ goto unlock;
|
|
|
|
|
|
/* set the new array to event->tp_event and set event->prog */
|
|
|
event->prog = prog;
|
|
|
rcu_assign_pointer(event->tp_event->prog_array, new_array);
|
|
|
bpf_prog_array_free(old_array);
|
|
|
|
|
|
-out:
|
|
|
+unlock:
|
|
|
mutex_unlock(&bpf_event_mutex);
|
|
|
return ret;
|
|
|
}
|
|
@@ -796,11 +795,9 @@ void perf_event_detach_bpf_prog(struct perf_event *event)
|
|
|
mutex_lock(&bpf_event_mutex);
|
|
|
|
|
|
if (!event->prog)
|
|
|
- goto out;
|
|
|
-
|
|
|
- old_array = rcu_dereference_protected(event->tp_event->prog_array,
|
|
|
- lockdep_is_held(&bpf_event_mutex));
|
|
|
+ goto unlock;
|
|
|
|
|
|
+ old_array = event->tp_event->prog_array;
|
|
|
ret = bpf_prog_array_copy(old_array, event->prog, NULL, &new_array);
|
|
|
if (ret < 0) {
|
|
|
bpf_prog_array_delete_safe(old_array, event->prog);
|
|
@@ -812,6 +809,6 @@ void perf_event_detach_bpf_prog(struct perf_event *event)
|
|
|
bpf_prog_put(event->prog);
|
|
|
event->prog = NULL;
|
|
|
|
|
|
-out:
|
|
|
+unlock:
|
|
|
mutex_unlock(&bpf_event_mutex);
|
|
|
}
|