From: luto at amacapital.net (Andy Lutomirski) Subject: [PATCH 1/4] x86/thread_info: introduce ->ftrace_int3_stack member Date: Sun, 28 Apr 2019 10:41:10 -0700 [thread overview] Message-ID: <F6268634-96D3-4267-B739-6D375FAB26A8@amacapital.net> (raw) In-Reply-To: <20190427100639.15074-2-nstange@suse.de> > On Apr 27, 2019, at 3:06 AM, Nicolai Stange <nstange at suse.de> wrote: > > Before actually rewriting an insn, x86' DYNAMIC_FTRACE implementation > places an int3 breakpoint on it. Currently, ftrace_int3_handler() simply > treats the insn in question as nop and advances %rip past it. How does this not crash all the time? > An upcoming > patch will improve this by making the int3 trap handler emulate the call > insn. To this end, ftrace_int3_handler() will be made to change its iret > frame's ->ip to some stub which will then mimic the function call in the > original context. > > Somehow the trapping ->ip address will have to get communicated from > ftrace_int3_handler() to these stubs though. Cute. But this should get “ftrace” removed from the name, since it’s potentially more generally useful. Josh wanted something like this for static_call. > Note that at any given point > in time, there can be at most four such call insn emulations pending: > namely at most one per "process", "irq", "softirq" and "nmi" context. > That’s quite an assumption. I think your list should also contain exception, exceptions nested inside that exception, and machine check, at the very least. I’m also wondering why irq and softirq are treated separately. All this makes me think that one of the other solutions we came up with last time we discussed this might be better.
WARNING: multiple messages have this Message-ID (diff)
From: luto@amacapital.net (Andy Lutomirski) Subject: [PATCH 1/4] x86/thread_info: introduce ->ftrace_int3_stack member Date: Sun, 28 Apr 2019 10:41:10 -0700 [thread overview] Message-ID: <F6268634-96D3-4267-B739-6D375FAB26A8@amacapital.net> (raw) Message-ID: <20190428174110.vj9e5wf0m5_CVRs658OZUjNiM8s2HC8lh5lOzzkO4KE@z> (raw) In-Reply-To: <20190427100639.15074-2-nstange@suse.de> > On Apr 27, 2019,@3:06 AM, Nicolai Stange <nstange@suse.de> wrote: > > Before actually rewriting an insn, x86' DYNAMIC_FTRACE implementation > places an int3 breakpoint on it. Currently, ftrace_int3_handler() simply > treats the insn in question as nop and advances %rip past it. How does this not crash all the time? > An upcoming > patch will improve this by making the int3 trap handler emulate the call > insn. To this end, ftrace_int3_handler() will be made to change its iret > frame's ->ip to some stub which will then mimic the function call in the > original context. > > Somehow the trapping ->ip address will have to get communicated from > ftrace_int3_handler() to these stubs though. Cute. But this should get “ftrace” removed from the name, since it’s potentially more generally useful. Josh wanted something like this for static_call. > Note that at any given point > in time, there can be at most four such call insn emulations pending: > namely at most one per "process", "irq", "softirq" and "nmi" context. > That’s quite an assumption. I think your list should also contain exception, exceptions nested inside that exception, and machine check, at the very least. I’m also wondering why irq and softirq are treated separately. All this makes me think that one of the other solutions we came up with last time we discussed this might be better.
next prev parent reply other threads:[~2019-04-28 17:41 UTC|newest] Thread overview: 128+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-04-27 10:06 [PATCH 0/4] x86/ftrace: make ftrace_int3_handler() not to skip fops invocation nstange 2019-04-27 10:06 ` Nicolai Stange 2019-04-27 10:06 ` [PATCH 1/4] x86/thread_info: introduce ->ftrace_int3_stack member nstange 2019-04-27 10:06 ` Nicolai Stange 2019-04-28 17:41 ` luto [this message] 2019-04-28 17:41 ` Andy Lutomirski 2019-04-28 17:51 ` rostedt 2019-04-28 17:51 ` Steven Rostedt 2019-04-28 18:08 ` luto 2019-04-28 18:08 ` Andy Lutomirski 2019-04-28 19:43 ` rostedt 2019-04-28 19:43 ` Steven Rostedt 2019-04-28 20:56 ` luto 2019-04-28 20:56 ` Andy Lutomirski 2019-04-28 21:22 ` nstange 2019-04-28 21:22 ` Nicolai Stange 2019-04-28 23:27 ` luto 2019-04-28 23:27 ` Andy Lutomirski 2019-04-27 10:06 ` [PATCH 2/4] ftrace: drop 'static' qualifier from ftrace_ops_list_func() nstange 2019-04-27 10:06 ` Nicolai Stange 2019-04-27 10:06 ` [PATCH 3/4] x86/ftrace: make ftrace_int3_handler() not to skip fops invocation nstange 2019-04-27 10:06 ` Nicolai Stange 2019-04-27 10:26 ` peterz 2019-04-27 10:26 ` Peter Zijlstra 2019-04-28 17:38 ` rostedt 2019-04-28 17:38 ` Steven Rostedt 2019-04-29 18:06 ` torvalds 2019-04-29 18:06 ` Linus Torvalds 2019-04-29 18:22 ` torvalds 2019-04-29 18:22 ` Linus Torvalds 2019-04-29 18:42 ` luto 2019-04-29 18:42 ` Andy Lutomirski [not found] ` <CAHk-=whtt4K2f0KPtG-4Pykh3FK8UBOjD8jhXCUKB5nWDj_YRA@mail.gmail.com> 2019-04-29 18:56 ` luto 2019-04-29 18:56 ` Andy Lutomirski [not found] ` <CAHk-=wgewK4eFhF3=0RNtk1KQjMANFH6oDE=8m=84RExn2gxhw@mail.gmail.com> [not found] ` <CAHk-=whay7eN6+2gZjY-ybRbkbcqAmgrLwwszzHx8ws3c=S-MA@mail.gmail.com> 2019-04-29 19:24 ` luto 2019-04-29 19:24 ` Andy Lutomirski 2019-04-29 20:07 ` torvalds 2019-04-29 20:07 ` Linus Torvalds 2019-04-30 13:56 ` peterz 2019-04-30 13:56 ` Peter Zijlstra 2019-04-30 16:06 ` torvalds 2019-04-30 16:06 ` Linus Torvalds 2019-04-30 16:33 ` luto 2019-04-30 16:33 ` Andy Lutomirski 2019-04-30 17:03 ` rostedt 2019-04-30 17:03 ` Steven Rostedt 2019-04-30 17:20 ` rostedt 2019-04-30 17:20 ` Steven Rostedt 2019-04-30 17:49 ` [RFC][PATCH] ftrace/x86: Emulate call function while updating in breakpoint handler rostedt 2019-04-30 17:49 ` Steven Rostedt 2019-04-30 18:33 ` torvalds 2019-04-30 18:33 ` Linus Torvalds 2019-04-30 19:00 ` rostedt 2019-04-30 19:00 ` Steven Rostedt 2019-04-30 21:08 ` rostedt 2019-04-30 21:08 ` Steven Rostedt 2019-05-01 13:11 ` peterz 2019-05-01 13:11 ` Peter Zijlstra 2019-05-01 18:58 ` rostedt 2019-05-01 18:58 ` Steven Rostedt 2019-05-01 19:03 ` peterz 2019-05-01 19:03 ` Peter Zijlstra 2019-05-01 19:03 ` torvalds 2019-05-01 19:03 ` Linus Torvalds 2019-05-01 19:13 ` peterz 2019-05-01 19:13 ` Peter Zijlstra 2019-05-01 19:13 ` rostedt 2019-05-01 19:13 ` Steven Rostedt 2019-05-01 19:33 ` jikos 2019-05-01 19:33 ` Jiri Kosina 2019-05-01 19:41 ` peterz 2019-05-01 19:41 ` Peter Zijlstra 2019-04-30 21:53 ` [RFC][PATCH v2] " rostedt 2019-04-30 21:53 ` Steven Rostedt 2019-05-01 1:35 ` rostedt 2019-05-01 1:35 ` Steven Rostedt 2019-05-01 1:58 ` torvalds 2019-05-01 1:58 ` Linus Torvalds 2019-05-01 8:26 ` nstange 2019-05-01 8:26 ` Nicolai Stange 2019-05-01 13:22 ` rostedt 2019-05-01 13:22 ` Steven Rostedt 2019-04-29 20:16 ` [PATCH 3/4] x86/ftrace: make ftrace_int3_handler() not to skip fops invocation torvalds 2019-04-29 20:16 ` Linus Torvalds 2019-04-29 22:08 ` sean.j.christopherson 2019-04-29 22:08 ` Sean Christopherson 2019-04-29 22:22 ` torvalds 2019-04-29 22:22 ` Linus Torvalds 2019-04-30 0:08 ` sean.j.christopherson 2019-04-30 0:08 ` Sean Christopherson 2019-04-30 0:45 ` sean.j.christopherson 2019-04-30 0:45 ` Sean Christopherson 2019-04-30 2:26 ` torvalds 2019-04-30 2:26 ` Linus Torvalds 2019-04-30 10:40 ` peterz 2019-04-30 10:40 ` Peter Zijlstra 2019-04-30 11:17 ` jikos 2019-04-30 11:17 ` Jiri Kosina 2019-04-29 22:06 ` torvalds 2019-04-29 22:06 ` Linus Torvalds 2019-04-30 11:18 ` peterz 2019-04-30 11:18 ` Peter Zijlstra 2019-04-29 18:52 ` rostedt 2019-04-29 18:52 ` Steven Rostedt [not found] ` <CAHk-=wjm93jLtVxTX4HZs6K4k1Wqh3ujjmapqaYtcibVk_YnzQ@mail.gmail.com> 2019-04-29 19:07 ` rostedt 2019-04-29 19:07 ` Steven Rostedt 2019-04-29 20:06 ` torvalds 2019-04-29 20:06 ` Linus Torvalds 2019-04-29 20:20 ` torvalds 2019-04-29 20:20 ` Linus Torvalds 2019-04-29 20:30 ` rostedt 2019-04-29 20:30 ` Steven Rostedt 2019-04-29 21:38 ` torvalds 2019-04-29 21:38 ` Linus Torvalds 2019-04-29 22:07 ` rostedt 2019-04-29 22:07 ` Steven Rostedt 2019-04-30 9:24 ` nstange 2019-04-30 9:24 ` Nicolai Stange 2019-04-30 10:46 ` peterz 2019-04-30 10:46 ` Peter Zijlstra 2019-04-30 13:44 ` rostedt 2019-04-30 13:44 ` Steven Rostedt 2019-04-30 14:20 ` peterz 2019-04-30 14:20 ` Peter Zijlstra 2019-04-30 14:36 ` rostedt 2019-04-30 14:36 ` Steven Rostedt 2019-04-27 10:06 ` [PATCH 4/4] selftests/livepatch: add "ftrace a live patched function" test nstange 2019-04-27 10:06 ` Nicolai Stange
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=F6268634-96D3-4267-B739-6D375FAB26A8@amacapital.net \ --to=linux-kselftest@vger.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: linkBe 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; as well as URLs for NNTP newsgroup(s).