Perf events fixes:

- Fix Alpha build failure caused by a semantic conflict
    between perf and arch-alpha changes (Thomas Weißschuh)
 
  - Fix UAF in attach_task_ctx_data() (Lee Jia Jie)
 
  - Fix perf_remove_from_context() event scheduling (Peter Zijlstra)
 
 Signed-off-by: Ingo Molnar <mingo@kernel.org>
 -----BEGIN PGP SIGNATURE-----
 
 iQJFBAABCgAvFiEEBpT5eoXrXCwVQwEKEnMQ0APhK1gFAmrd4xkRHG1pbmdvQGtl
 cm5lbC5vcmcACgkQEnMQ0APhK1ikFA/+Px8L30NgsgI4E0cm+GVLBh6W5NnQT6bO
 Ac61v9Cj1YvOf+Dz8OqQpId7luwl/CA9ZygUQ5bMYgSUl8UwuC5/ALEAsb34v/xJ
 /u7QvFDfi2Z3SVMC4g9w6A/wEMBjQX84T1eNDVxm9w9jXDU+IxFoTxuMdOpY4ZEi
 rBxFE4gHemlc8+hHxXx4wKxS09pJRdHpMJfDx1dQm2Jg3/YmJ8mPsGV0hbK7mShZ
 Pybw9XnyHlvqiBJkFK9LCSsl/jTY1iI0D1uATBd0SwAwRSSSdeoJTKGHZQkSKo7V
 kwj6h3sCcRrdqSnQH8ZHL0+Pzc6NY/Paxpw7UcEuJlFmNzdwktwae519fVJwET5x
 IYH2BSMNhNXLwpnXhww3js8yOyHRSuHDcNf0sb2mVU8wpnQhzrRxeS1HqfkwPb9e
 ViH2lhu0KLClsRO3+K5irnPB3o4yYkkl41/pCUjjgxve38hIxx3ng24DlfSPibFu
 SHWVAawcCwCREDbJOGY/v0fYCneaGWs8sVIbi7OKTYOdGjkISoh8sZxuuFD7EKik
 j7fKhS944euPe50vswRNVhc0G4NR8x1yWywDXcIvOqkRueoeETcDrOkKE2aZ19EZ
 JUS2DmnW6stZpt3CB2YpF06bOmSicVz+riUPT3XND5btbOdJTrR/j5sIzS8Iui6w
 3gt9QvS2Jgs=
 =hdtW
 -----END PGP SIGNATURE-----

Merge tag 'perf-urgent-2026-10-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull perf events fixes from Ingo Molnar:

 - Fix Alpha build failure caused by a semantic conflict
   between perf and arch-alpha changes (Thomas Weißschuh)

 - Fix UAF in attach_task_ctx_data() (Lee Jia Jie)

 - Fix perf_remove_from_context() event scheduling (Peter Zijlstra)

* tag 'perf-urgent-2026-10-25' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  perf: Fix perf_remove_from_context() event scheduling
  perf: Fix UAF in attach_task_ctx_data()
  alpha: add simd_enabled argument to perf_reg_validate()
This commit is contained in:
Linus Torvalds 2026-10-25 17:52:28 -10:00
commit dc7be96c1c
2 changed files with 13 additions and 1 deletions

View File

@ -43,7 +43,7 @@ u64 perf_reg_value(struct pt_regs *regs, int idx)
return *(unsigned long *)((void *)regs + pt_regs_offset[idx]);
}
int perf_reg_validate(u64 mask)
int perf_reg_validate(u64 mask, bool simd_enabled)
{
if (!mask || mask & REG_RESERVED)
return -EINVAL;

View File

@ -2590,6 +2590,7 @@ __perf_remove_from_context(struct perf_event *event,
enum perf_event_state state = PERF_EVENT_STATE_OFF;
unsigned long flags = (unsigned long)info;
perf_pmu_disable(pmu_ctx->pmu);
ctx_time_update(cpuctx, ctx);
/*
@ -2603,6 +2604,13 @@ __perf_remove_from_context(struct perf_event *event,
if (flags & DETACH_DEAD)
state = PERF_EVENT_STATE_DEAD;
/*
* When disabling a group leader, the whole group becomes ineligible
* to run, so schedule out the full group.
*/
if (!(flags & DETACH_GROUP) && event == event->group_leader)
group_sched_out(event, ctx);
__event_disable(event, ctx, state);
if (flags & DETACH_GROUP)
@ -2632,6 +2640,7 @@ __perf_remove_from_context(struct perf_event *event,
cpuctx->task_ctx = NULL;
}
}
perf_pmu_enable(pmu_ctx->pmu);
}
/*
@ -5434,6 +5443,9 @@ attach_task_ctx_data(struct task_struct *task, struct kmem_cache *ctx_cache,
return -ENOMEM;
for (;;) {
/* Protect @old until inc_not_zero(&old->refcount) */
guard(rcu)();
if (try_cmpxchg(&task->perf_ctx_data, &old, cd)) {
if (old)
perf_free_ctx_data_rcu(old);