diff options
| -rw-r--r-- | arch/x86/kernel/kprobes/opt.c | 4 | ||||
| -rw-r--r-- | kernel/events/core.c | 10 |
2 files changed, 13 insertions, 1 deletions
diff --git a/arch/x86/kernel/kprobes/opt.c b/arch/x86/kernel/kprobes/opt.c index f304773285ae..f1314d0bcf0a 100644 --- a/arch/x86/kernel/kprobes/opt.c +++ b/arch/x86/kernel/kprobes/opt.c | |||
| @@ -338,8 +338,10 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe *op) | |||
| 338 | * a relative jump. | 338 | * a relative jump. |
| 339 | */ | 339 | */ |
| 340 | rel = (long)op->optinsn.insn - (long)op->kp.addr + RELATIVEJUMP_SIZE; | 340 | rel = (long)op->optinsn.insn - (long)op->kp.addr + RELATIVEJUMP_SIZE; |
| 341 | if (abs(rel) > 0x7fffffff) | 341 | if (abs(rel) > 0x7fffffff) { |
| 342 | __arch_remove_optimized_kprobe(op, 0); | ||
| 342 | return -ERANGE; | 343 | return -ERANGE; |
| 344 | } | ||
| 343 | 345 | ||
| 344 | buf = (u8 *)op->optinsn.insn; | 346 | buf = (u8 *)op->optinsn.insn; |
| 345 | 347 | ||
diff --git a/kernel/events/core.c b/kernel/events/core.c index f9c1ed002dbc..d640a8b4dcbc 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c | |||
| @@ -1524,6 +1524,11 @@ retry: | |||
| 1524 | */ | 1524 | */ |
| 1525 | if (ctx->is_active) { | 1525 | if (ctx->is_active) { |
| 1526 | raw_spin_unlock_irq(&ctx->lock); | 1526 | raw_spin_unlock_irq(&ctx->lock); |
| 1527 | /* | ||
| 1528 | * Reload the task pointer, it might have been changed by | ||
| 1529 | * a concurrent perf_event_context_sched_out(). | ||
| 1530 | */ | ||
| 1531 | task = ctx->task; | ||
| 1527 | goto retry; | 1532 | goto retry; |
| 1528 | } | 1533 | } |
| 1529 | 1534 | ||
| @@ -1967,6 +1972,11 @@ retry: | |||
| 1967 | */ | 1972 | */ |
| 1968 | if (ctx->is_active) { | 1973 | if (ctx->is_active) { |
| 1969 | raw_spin_unlock_irq(&ctx->lock); | 1974 | raw_spin_unlock_irq(&ctx->lock); |
| 1975 | /* | ||
| 1976 | * Reload the task pointer, it might have been changed by | ||
| 1977 | * a concurrent perf_event_context_sched_out(). | ||
| 1978 | */ | ||
| 1979 | task = ctx->task; | ||
| 1970 | goto retry; | 1980 | goto retry; |
| 1971 | } | 1981 | } |
| 1972 | 1982 | ||
