mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
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:
commit
dc7be96c1c
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user