From: Peter Zijlstra <peterz@infradead.org>
To: Masami Hiramatsu <mhiramat@kernel.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
Nadav Amit <nadav.amit@gmail.com>,
Andy Lutomirski <luto@kernel.org>,
Dave Hansen <dave.hansen@linux.intel.com>,
Song Liu <songliubraving@fb.com>,
Steven Rostedt <rostedt@goodmis.org>,
Daniel Bristot de Oliveira <bristot@redhat.com>
Subject: Re: [PATCH 1/3] x86/alternatives: Teach text_poke_bp() to emulate instructions
Date: Thu, 3 Oct 2019 14:32:31 +0200 [thread overview]
Message-ID: <20191003123231.GK4581@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20191003110106.GI4581@hirez.programming.kicks-ass.net>
On Thu, Oct 03, 2019 at 01:01:06PM +0200, Peter Zijlstra wrote:
> Also, I think text_poke_bp(INT3) is broken, although I don't think
> anybody actually does that. Still, let me fix that.
Something like so should allow text_poke_bp(INT3) to work as expected.
---
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -999,6 +999,13 @@ int poke_int3_handler(struct pt_regs *re
ip += tp->len;
switch (tp->opcode) {
+ case INT3_INSN_OPCODE:
+ /*
+ * Someone poked an explicit INT3, they'll want to handle it,
+ * do not consume.
+ */
+ return 0;
+
case CALL_INSN_OPCODE:
int3_emulate_call(regs, (long)ip + tp->rel32);
break;
@@ -1040,8 +1047,8 @@ NOKPROBE_SYMBOL(poke_int3_handler);
void text_poke_bp_batch(struct text_poke_loc *tp, unsigned int nr_entries)
{
unsigned char int3 = INT3_INSN_OPCODE;
- int patched_all_but_first = 0;
unsigned int i;
+ int do_sync;
lockdep_assert_held(&text_mutex);
@@ -1065,16 +1072,16 @@ void text_poke_bp_batch(struct text_poke
/*
* Second step: update all but the first byte of the patched range.
*/
- for (i = 0; i < nr_entries; i++) {
+ for (do_sync = 0, i = 0; i < nr_entries; i++) {
if (tp[i].len - sizeof(int3) > 0) {
text_poke((char *)tp[i].addr + sizeof(int3),
(const char *)tp[i].text + sizeof(int3),
tp[i].len - sizeof(int3));
- patched_all_but_first++;
+ do_sync++;
}
}
- if (patched_all_but_first) {
+ if (do_sync) {
/*
* According to Intel, this core syncing is very likely
* not necessary and we'd be safe even without it. But
@@ -1087,10 +1094,17 @@ void text_poke_bp_batch(struct text_poke
* Third step: replace the first byte (int3) by the first byte of
* replacing opcode.
*/
- for (i = 0; i < nr_entries; i++)
+ for (do_sync = 0, i = 0; i < nr_entries; i++) {
+ if (tp[i].text[0] == INT3_INSN_OPCODE)
+ continue;
+
text_poke(tp[i].addr, tp[i].text, sizeof(int3));
+ do_sync++;
+ }
+
+ if (do_sync)
+ on_each_cpu(do_sync_core, NULL, 1);
- on_each_cpu(do_sync_core, NULL, 1);
/*
* sync_core() implies an smp_mb() and orders this store against
* the writing of the new instruction.
@@ -1123,6 +1137,9 @@ void text_poke_loc_init(struct text_poke
tp->opcode = insn.opcode.bytes[0];
switch (tp->opcode) {
+ case INT3_INSN_OPCPDE:
+ break;
+
case CALL_INSN_OPCODE:
case JMP32_INSN_OPCODE:
case JMP8_INSN_OPCODE:
next prev parent reply other threads:[~2019-10-03 12:32 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-27 18:06 [PATCH 0/3] Rewrite x86/ftrace to use text_poke() Peter Zijlstra
2019-08-27 18:06 ` [PATCH 1/3] x86/alternatives: Teach text_poke_bp() to emulate instructions Peter Zijlstra
2019-10-03 5:00 ` Masami Hiramatsu
2019-10-03 8:27 ` Peter Zijlstra
2019-10-03 11:01 ` Peter Zijlstra
2019-10-03 12:32 ` Peter Zijlstra [this message]
2019-10-04 13:45 ` Masami Hiramatsu
2019-10-07 8:05 ` Peter Zijlstra
2019-10-09 13:07 ` x86/kprobes bug? (was: [PATCH 1/3] x86/alternatives: Teach text_poke_bp() to emulate instructions) Peter Zijlstra
2019-10-09 13:26 ` Peter Zijlstra
2019-10-09 13:28 ` Peter Zijlstra
2019-10-09 14:26 ` Mathieu Desnoyers
2019-10-17 19:59 ` Peter Zijlstra
2019-10-03 13:05 ` [PATCH 1/3] x86/alternatives: Teach text_poke_bp() to emulate instructions Peter Zijlstra
2019-08-27 18:06 ` [PATCH 2/3] x86/alternatives,jump_label: Provide better text_poke() batching interface Peter Zijlstra
2019-10-02 16:34 ` Daniel Bristot de Oliveira
2019-10-03 5:50 ` Masami Hiramatsu
2019-08-27 18:06 ` [PATCH 3/3] x86/ftrace: Use text_poke() Peter Zijlstra
2019-10-02 16:35 ` Daniel Bristot de Oliveira
2019-10-02 18:21 ` Peter Zijlstra
2019-10-03 22:10 ` Steven Rostedt
2019-10-04 8:10 ` Daniel Bristot de Oliveira
2019-10-04 13:40 ` Steven Rostedt
2019-10-04 14:44 ` Daniel Bristot de Oliveira
2019-10-04 15:13 ` Steven Rostedt
2019-10-07 8:08 ` Peter Zijlstra
2019-10-11 7:01 ` Peter Zijlstra
2019-10-11 7:37 ` Daniel Bristot de Oliveira
2019-10-11 10:57 ` Peter Zijlstra
2019-10-11 13:11 ` Steven Rostedt
2019-10-04 11:22 ` Peter Zijlstra
2019-10-04 13:42 ` Steven Rostedt
2019-10-22 0:36 ` Alexei Starovoitov
2019-10-22 0:43 ` Steven Rostedt
2019-10-22 3:10 ` Alexei Starovoitov
2019-10-22 3:16 ` Steven Rostedt
2019-10-22 3:19 ` Steven Rostedt
2019-10-22 4:05 ` Alexei Starovoitov
2019-10-22 11:19 ` Steven Rostedt
2019-10-22 13:44 ` Steven Rostedt
2019-10-22 17:50 ` Alexei Starovoitov
2019-10-22 18:10 ` Steven Rostedt
2019-10-22 20:46 ` Alexei Starovoitov
2019-10-22 21:04 ` Steven Rostedt
2019-10-22 21:58 ` Alexei Starovoitov
2019-10-22 22:17 ` Steven Rostedt
2019-10-23 2:02 ` Steven Rostedt
2019-10-22 22:45 ` Andy Lutomirski
2019-10-22 23:21 ` Steven Rostedt
2019-10-22 23:49 ` Alexei Starovoitov
2019-10-23 4:20 ` Andy Lutomirski
2019-10-23 9:02 ` Peter Zijlstra
2019-10-23 16:23 ` Steven Rostedt
2019-10-23 17:42 ` Steven Rostedt
2019-10-23 19:34 ` Alexei Starovoitov
2019-10-23 20:08 ` Steven Rostedt
2019-10-23 22:36 ` Alexei Starovoitov
2019-10-22 3:55 ` Alexei Starovoitov
2019-10-03 5:52 ` Masami Hiramatsu
2019-08-28 7:22 ` [PATCH 0/3] Rewrite x86/ftrace to use text_poke() Song Liu
-- strict thread matches above, loose matches on Subject: below --
2019-08-26 12:51 Peter Zijlstra
2019-08-26 12:51 ` [PATCH 1/3] x86/alternatives: Teach text_poke_bp() to emulate instructions Peter Zijlstra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20191003123231.GK4581@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=bristot@redhat.com \
--cc=dave.hansen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mhiramat@kernel.org \
--cc=nadav.amit@gmail.com \
--cc=rostedt@goodmis.org \
--cc=songliubraving@fb.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome