Merge branch 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull perf fixes from Ingo Molnar: "Two kernel side fixes: a kprobes fix and a perf_remove_from_context() fix (which does not yet fix the migration bug which is WIP)" * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: perf: Fix a race condition in perf_remove_from_context() kprobes/x86: Free 'optinsn' cache when range check fails
This commit is contained in:
@@ -338,8 +338,10 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op)
|
|||||||
* a relative jump.
|
* a relative jump.
|
||||||
*/
|
*/
|
||||||
rel = (long)op->optinsn.insn - (long)op->kp.addr + RELATIVEJUMP_SIZE;
|
rel = (long)op->optinsn.insn - (long)op->kp.addr + RELATIVEJUMP_SIZE;
|
||||||
if (abs(rel) > 0x7fffffff)
|
if (abs(rel) > 0x7fffffff) {
|
||||||
|
__arch_remove_optimized_kprobe(op, 0);
|
||||||
return -ERANGE;
|
return -ERANGE;
|
||||||
|
}
|
||||||
|
|
||||||
buf = (u8 *)op->optinsn.insn;
|
buf = (u8 *)op->optinsn.insn;
|
||||||
|
|
||||||
|
@@ -1524,6 +1524,11 @@ retry:
|
|||||||
*/
|
*/
|
||||||
if (ctx->is_active) {
|
if (ctx->is_active) {
|
||||||
raw_spin_unlock_irq(&ctx->lock);
|
raw_spin_unlock_irq(&ctx->lock);
|
||||||
|
/*
|
||||||
|
* Reload the task pointer, it might have been changed by
|
||||||
|
* a concurrent perf_event_context_sched_out().
|
||||||
|
*/
|
||||||
|
task = ctx->task;
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1967,6 +1972,11 @@ retry:
|
|||||||
*/
|
*/
|
||||||
if (ctx->is_active) {
|
if (ctx->is_active) {
|
||||||
raw_spin_unlock_irq(&ctx->lock);
|
raw_spin_unlock_irq(&ctx->lock);
|
||||||
|
/*
|
||||||
|
* Reload the task pointer, it might have been changed by
|
||||||
|
* a concurrent perf_event_context_sched_out().
|
||||||
|
*/
|
||||||
|
task = ctx->task;
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user