From: Steven Rostedt <rostedt@goodmis.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: LKML <linux-kernel@vger.kernel.org>, Jessica Yu <jeyu@kernel.org>,
Ingo Molnar <mingo@kernel.org>
Subject: Re: [PATCH] ftrace/module: Allow ftrace to make only loaded module text read-write
Date: Thu, 10 Oct 2019 13:20:13 -0400 [thread overview]
Message-ID: <20191010132013.7f3388bc@gandalf.local.home> (raw)
In-Reply-To: <20191010170111.GQ2328@hirez.programming.kicks-ass.net>
On Thu, 10 Oct 2019 19:01:11 +0200
Peter Zijlstra <peterz@infradead.org> wrote:
> On Thu, Oct 10, 2019 at 10:55:15AM -0400, Steven Rostedt wrote:
>
> > OK, so basically this moves the enabling of function tracing from
> > within the ftrace_module_enable() code without releasing the
> > ftrace_lock mutex.
> >
> > But we have an issue with the state of the module here, as it is still
> > set as MODULE_STATE_UNFORMED. Let's look at what happens if we have:
> >
> >
> > CPU0 CPU1
> > ---- ----
> > echo function > current_tracer
> > modprobe foo
> > enable foo functions to be traced
> > (foo function records not disabled)
> > echo nop > current_tracer
> >
> > disable all functions being
> > traced including foo functions
> >
> > arch calls set_all_modules_text_rw()
> > [skips UNFORMED modules, which foo still is ]
> >
> > set foo's text to read-only
> > foo's state to COMING
> >
> > tries to disable foo's functions
> > foo's text is read-only
> >
> > BUG trying to write to ro text!!!
> >
> >
> > Like I said, this is very subtle. It may no longer be a bug on x86
> > with your patches, but it will bug on ARM or anything else that still
> > uses set_all_modules_text_rw() in the ftrace prepare code.
>
> I can't immediately follow, but I think we really should go there.
>
> For now, something like this might work:
Hmm, I'm lost at what the below is trying to do with respect to the
above.
-- Steve
>
> --- a/arch/x86/kernel/ftrace.c
> +++ b/arch/x86/kernel/ftrace.c
> @@ -34,6 +34,8 @@
>
> #ifdef CONFIG_DYNAMIC_FTRACE
>
> +static int ftrace_poke_late = 0;
> +
> int ftrace_arch_code_modify_prepare(void)
> __acquires(&text_mutex)
> {
> @@ -43,12 +45,15 @@ int ftrace_arch_code_modify_prepare(void
> * ftrace has it set to "read/write".
> */
> mutex_lock(&text_mutex);
> + ftrace_poke_late = 1;
> return 0;
> }
>
> int ftrace_arch_code_modify_post_process(void)
> __releases(&text_mutex)
> {
> + text_poke_finish();
> + ftrace_poke_late = 0;
> mutex_unlock(&text_mutex);
> return 0;
> }
> @@ -116,7 +121,10 @@ ftrace_modify_code_direct(unsigned long
> return ret;
>
> /* replace the text with the new text */
> - text_poke_early((void *)ip, new_code, MCOUNT_INSN_SIZE);
> + if (ftrace_poke_late)
> + text_poke_queue((void *)ip, new_code, MCOUNT_INSN_SIZE, NULL);
> + else
> + text_poke_early((void *)ip, new_code, MCOUNT_INSN_SIZE);
> return 0;
> }
>
next prev parent reply other threads:[~2019-10-10 17:20 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-10 2:36 [PATCH] ftrace/module: Allow ftrace to make only loaded module text read-write Steven Rostedt
2019-10-10 7:31 ` Peter Zijlstra
2019-10-10 9:26 ` Peter Zijlstra
2019-10-10 9:33 ` Peter Zijlstra
2019-10-10 9:36 ` Peter Zijlstra
2019-10-10 12:29 ` Peter Zijlstra
2019-10-10 14:55 ` Steven Rostedt
2019-10-10 15:03 ` Steven Rostedt
2019-10-10 16:59 ` Steven Rostedt
2019-10-10 17:01 ` Peter Zijlstra
2019-10-10 17:20 ` Steven Rostedt [this message]
2019-10-11 11:09 ` Peter Zijlstra
2019-10-10 12:50 ` Steven Rostedt
2019-10-10 14:11 ` Peter Zijlstra
2019-10-10 12:58 ` Steven Rostedt
2019-10-14 12:31 ` Jessica Yu
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=20191010132013.7f3388bc@gandalf.local.home \
--to=rostedt@goodmis.org \
--cc=jeyu@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.