Commit 80102f2e authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'perf_urgent_for_v6.3_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull perf fixes from Borislav Petkov:

 - Check whether sibling events have been deactivated before adding them
   to groups

 - Update the proper event time tracking variable depending on the event
   type

 - Fix a memory overwrite issue due to using the wrong function argument
   when outputting perf events

* tag 'perf_urgent_for_v6.3_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf: Fix check before add_event_to_groups() in perf_group_detach()
  perf: fix perf_event_context->time
  perf/core: Fix perf_output_begin parameter is incorrectly invoked in perf_event_bpf_output
parents 4ac39c59 fd0815f6
...@@ -2163,7 +2163,7 @@ static void perf_group_detach(struct perf_event *event) ...@@ -2163,7 +2163,7 @@ static void perf_group_detach(struct perf_event *event)
/* Inherit group flags from the previous leader */ /* Inherit group flags from the previous leader */
sibling->group_caps = event->group_caps; sibling->group_caps = event->group_caps;
if (!RB_EMPTY_NODE(&event->group_node)) { if (sibling->attach_state & PERF_ATTACH_CONTEXT) {
add_event_to_groups(sibling, event->ctx); add_event_to_groups(sibling, event->ctx);
if (sibling->state == PERF_EVENT_STATE_ACTIVE) if (sibling->state == PERF_EVENT_STATE_ACTIVE)
...@@ -3872,7 +3872,7 @@ ctx_sched_in(struct perf_event_context *ctx, enum event_type_t event_type) ...@@ -3872,7 +3872,7 @@ ctx_sched_in(struct perf_event_context *ctx, enum event_type_t event_type)
if (likely(!ctx->nr_events)) if (likely(!ctx->nr_events))
return; return;
if (is_active ^ EVENT_TIME) { if (!(is_active & EVENT_TIME)) {
/* start ctx time */ /* start ctx time */
__update_context_time(ctx, false); __update_context_time(ctx, false);
perf_cgroup_set_timestamp(cpuctx); perf_cgroup_set_timestamp(cpuctx);
...@@ -9187,7 +9187,7 @@ static void perf_event_bpf_output(struct perf_event *event, void *data) ...@@ -9187,7 +9187,7 @@ static void perf_event_bpf_output(struct perf_event *event, void *data)
perf_event_header__init_id(&bpf_event->event_id.header, perf_event_header__init_id(&bpf_event->event_id.header,
&sample, event); &sample, event);
ret = perf_output_begin(&handle, data, event, ret = perf_output_begin(&handle, &sample, event,
bpf_event->event_id.header.size); bpf_event->event_id.header.size);
if (ret) if (ret)
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment