2015-12-04 07:29:08

by Li Bin

[permalink] [raw]
Subject: [PATCH 0/5] ftrace: fix ftrace misleading comments for arch using it

Fix the following similar misleading comments of ftrace for arch
ia64/metag/powerpc/sh/x86:

Note: Due to modules and __init, code can
disappear and change, we need to protect against faulting
as well as code changing. We do this by using the
probe_kernel_* functions.

No real locking needed, this code is run through
kstop_machine, or before SMP starts.

Cc: Tony Luck <[email protected]>
Cc: Fenghua Yu <[email protected]>
Cc: [email protected]
Cc: James Hogan <[email protected]>
Cc: [email protected]
Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Michael Ellerman <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: Thomas Gleixner <[email protected]>
"Cc: H. Peter Anvin" <[email protected]>
Cc: [email protected]

Li Bin (5):
ia64: ftrace: fix the comments for ftrace_modify_code
metag: ftrace: fix the comments for ftrace_modify_code
powerpc: ftrace: fix the comments for ftrace_modify_code
sh: ftrace: fix the comments for ftrace_modify_code
x86: ftrace: fix the comments for ftrace_modify_code_direct

arch/ia64/kernel/ftrace.c | 13 ++++++-------
arch/metag/kernel/ftrace.c | 12 ++++++------
arch/powerpc/kernel/ftrace.c | 13 ++++++-------
arch/sh/kernel/ftrace.c | 13 ++++++-------
arch/x86/kernel/ftrace.c | 13 ++++++-------
5 files changed, 30 insertions(+), 34 deletions(-)


2015-12-04 07:28:18

by Li Bin

[permalink] [raw]
Subject: [PATCH 1/5] ia64: ftrace: fix the comments for ftrace_modify_code

There is no need to worry about module and __init text disappearing
case, because that ftrace has a module notifier that is called when
a module is being unloaded and before the text goes away and this
code grabs the ftrace_lock mutex and removes the module functions
from the ftrace list, such that it will no longer do any
modifications to that module's text, the update to make functions
be traced or not is done under the ftrace_lock mutex as well.
And by now, __init section codes should not been modified
by ftrace, because it is black listed in recordmcount.c and
ignored by ftrace.

Cc: Tony Luck <[email protected]>
Cc: Fenghua Yu <[email protected]>
Cc: [email protected]
Suggested-by: Steven Rostedt <[email protected]>
Signed-off-by: Li Bin <[email protected]>
---
arch/ia64/kernel/ftrace.c | 13 ++++++-------
1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/arch/ia64/kernel/ftrace.c b/arch/ia64/kernel/ftrace.c
index 3b0c2aa..a48a3f4 100644
--- a/arch/ia64/kernel/ftrace.c
+++ b/arch/ia64/kernel/ftrace.c
@@ -97,13 +97,12 @@ ftrace_modify_code(unsigned long ip, unsigned char *old_code,
unsigned char replaced[MCOUNT_INSN_SIZE];

/*
- * Note: Due to modules and __init, code can
- * disappear and change, we need to protect against faulting
- * as well as code changing. We do this by using the
- * probe_kernel_* functions.
- *
- * No real locking needed, this code is run through
- * kstop_machine, or before SMP starts.
+ * Note:
+ * We are paranoid about modifying text, as if a bug were to happen, it
+ * could cause us to read or write to someplace that could cause harm.
+ * Carefully read and modify the code with aarch64_insn_*() which uses
+ * probe_kernel_*(), and make sure what we read is what we expected it
+ * to be before modifying it.
*/

if (!do_check)
--
1.7.1

2015-12-04 07:29:06

by Li Bin

[permalink] [raw]
Subject: [PATCH 2/5] metag: ftrace: fix the comments for ftrace_modify_code

There is no need to worry about module and __init text disappearing
case, because that ftrace has a module notifier that is called when
a module is being unloaded and before the text goes away and this
code grabs the ftrace_lock mutex and removes the module functions
from the ftrace list, such that it will no longer do any
modifications to that module's text, the update to make functions
be traced or not is done under the ftrace_lock mutex as well.
And by now, __init section codes should not been modified
by ftrace, because it is black listed in recordmcount.c and
ignored by ftrace.

Cc: James Hogan <[email protected]>
Cc: [email protected]
Suggested-by: Steven Rostedt <[email protected]>
Signed-off-by: Li Bin <[email protected]>
---
arch/metag/kernel/ftrace.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/metag/kernel/ftrace.c b/arch/metag/kernel/ftrace.c
index ed1d685..e5d71b1 100644
--- a/arch/metag/kernel/ftrace.c
+++ b/arch/metag/kernel/ftrace.c
@@ -54,12 +54,12 @@ static int ftrace_modify_code(unsigned long pc, unsigned char *old_code,
unsigned char replaced[MCOUNT_INSN_SIZE];

/*
- * Note: Due to modules and __init, code can
- * disappear and change, we need to protect against faulting
- * as well as code changing.
- *
- * No real locking needed, this code is run through
- * kstop_machine.
+ * Note:
+ * We are paranoid about modifying text, as if a bug were to happen, it
+ * could cause us to read or write to someplace that could cause harm.
+ * Carefully read and modify the code with aarch64_insn_*() which uses
+ * probe_kernel_*(), and make sure what we read is what we expected it
+ * to be before modifying it.
*/

/* read the text we want to modify */
--
1.7.1

2015-12-04 07:31:54

by Li Bin

[permalink] [raw]
Subject: [PATCH 3/5] powerpc: ftrace: fix the comments for ftrace_modify_code

There is no need to worry about module and __init text disappearing
case, because that ftrace has a module notifier that is called when
a module is being unloaded and before the text goes away and this
code grabs the ftrace_lock mutex and removes the module functions
from the ftrace list, such that it will no longer do any
modifications to that module's text, the update to make functions
be traced or not is done under the ftrace_lock mutex as well.
And by now, __init section codes should not been modified
by ftrace, because it is black listed in recordmcount.c and
ignored by ftrace.

Cc: Benjamin Herrenschmidt <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Michael Ellerman <[email protected]>
Cc: [email protected]
Suggested-by: Steven Rostedt <[email protected]>
Signed-off-by: Li Bin <[email protected]>
---
arch/powerpc/kernel/ftrace.c | 13 ++++++-------
1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c
index 44d4d8e..c6452b2 100644
--- a/arch/powerpc/kernel/ftrace.c
+++ b/arch/powerpc/kernel/ftrace.c
@@ -47,13 +47,12 @@ ftrace_modify_code(unsigned long ip, unsigned int old, unsigned int new)
unsigned int replaced;

/*
- * Note: Due to modules and __init, code can
- * disappear and change, we need to protect against faulting
- * as well as code changing. We do this by using the
- * probe_kernel_* functions.
- *
- * No real locking needed, this code is run through
- * kstop_machine, or before SMP starts.
+ * Note:
+ * We are paranoid about modifying text, as if a bug were to happen, it
+ * could cause us to read or write to someplace that could cause harm.
+ * Carefully read and modify the code with aarch64_insn_*() which uses
+ * probe_kernel_*(), and make sure what we read is what we expected it
+ * to be before modifying it.
*/

/* read the text we want to modify */
--
1.7.1

2015-12-04 07:29:04

by Li Bin

[permalink] [raw]
Subject: [PATCH 4/5] sh: ftrace: fix the comments for ftrace_modify_code

There is no need to worry about module and __init text disappearing
case, because that ftrace has a module notifier that is called when
a module is being unloaded and before the text goes away and this
code grabs the ftrace_lock mutex and removes the module functions
from the ftrace list, such that it will no longer do any
modifications to that module's text, the update to make functions
be traced or not is done under the ftrace_lock mutex as well.
And by now, __init section codes should not been modified
by ftrace, because it is black listed in recordmcount.c and
ignored by ftrace.

Cc: [email protected]
Suggested-by: Steven Rostedt <[email protected]>
Signed-off-by: Li Bin <[email protected]>
---
arch/sh/kernel/ftrace.c | 13 ++++++-------
1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/arch/sh/kernel/ftrace.c b/arch/sh/kernel/ftrace.c
index 079d70e..b696f92 100644
--- a/arch/sh/kernel/ftrace.c
+++ b/arch/sh/kernel/ftrace.c
@@ -212,13 +212,12 @@ static int ftrace_modify_code(unsigned long ip, unsigned char *old_code,
unsigned char replaced[MCOUNT_INSN_SIZE];

/*
- * Note: Due to modules and __init, code can
- * disappear and change, we need to protect against faulting
- * as well as code changing. We do this by using the
- * probe_kernel_* functions.
- *
- * No real locking needed, this code is run through
- * kstop_machine, or before SMP starts.
+ * Note:
+ * We are paranoid about modifying text, as if a bug were to happen, it
+ * could cause us to read or write to someplace that could cause harm.
+ * Carefully read and modify the code with aarch64_insn_*() which uses
+ * probe_kernel_*(), and make sure what we read is what we expected it
+ * to be before modifying it.
*/

/* read the text we want to modify */
--
1.7.1

2015-12-04 07:33:43

by Li Bin

[permalink] [raw]
Subject: [PATCH 5/5] x86: ftrace: fix the comments for ftrace_modify_code_direct

There is no need to worry about module and __init text disappearing
case, because that ftrace has a module notifier that is called when
a module is being unloaded and before the text goes away and this
code grabs the ftrace_lock mutex and removes the module functions
from the ftrace list, such that it will no longer do any
modifications to that module's text, the update to make functions
be traced or not is done under the ftrace_lock mutex as well.
And by now, __init section codes should not been modified
by ftrace, because it is black listed in recordmcount.c and
ignored by ftrace.

Cc: Thomas Gleixner <[email protected]>
Cc: "H. Peter Anvin" <[email protected]>
Cc: [email protected]
Suggested-by: Steven Rostedt <[email protected]>
Signed-off-by: Li Bin <[email protected]>
---
arch/x86/kernel/ftrace.c | 13 ++++++-------
1 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index 311bcf3..c2987e8 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -106,13 +106,12 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
unsigned char replaced[MCOUNT_INSN_SIZE];

/*
- * Note: Due to modules and __init, code can
- * disappear and change, we need to protect against faulting
- * as well as code changing. We do this by using the
- * probe_kernel_* functions.
- *
- * No real locking needed, this code is run through
- * kstop_machine, or before SMP starts.
+ * Note:
+ * We are paranoid about modifying text, as if a bug were to happen, it
+ * could cause us to read or write to someplace that could cause harm.
+ * Carefully read and modify the code with aarch64_insn_*() which uses
+ * probe_kernel_*(), and make sure what we read is what we expected it
+ * to be before modifying it.
*/

/* read the text we want to modify */
--
1.7.1

2015-12-04 12:44:31

by Sergei Shtylyov

[permalink] [raw]
Subject: Re: [PATCH 4/5] sh: ftrace: fix the comments for ftrace_modify_code

Hello.

On 12/4/2015 10:27 AM, Li Bin wrote:

> There is no need to worry about module and __init text disappearing
> case, because that ftrace has a module notifier that is called when
> a module is being unloaded and before the text goes away and this
> code grabs the ftrace_lock mutex and removes the module functions
> from the ftrace list, such that it will no longer do any
> modifications to that module's text, the update to make functions
> be traced or not is done under the ftrace_lock mutex as well.
> And by now, __init section codes should not been modified
> by ftrace, because it is black listed in recordmcount.c and
> ignored by ftrace.
>
> Cc: [email protected]
> Suggested-by: Steven Rostedt <[email protected]>
> Signed-off-by: Li Bin <[email protected]>
> ---
> arch/sh/kernel/ftrace.c | 13 ++++++-------
> 1 files changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/arch/sh/kernel/ftrace.c b/arch/sh/kernel/ftrace.c
> index 079d70e..b696f92 100644
> --- a/arch/sh/kernel/ftrace.c
> +++ b/arch/sh/kernel/ftrace.c
> @@ -212,13 +212,12 @@ static int ftrace_modify_code(unsigned long ip, unsigned char *old_code,
> unsigned char replaced[MCOUNT_INSN_SIZE];
>
> /*
> - * Note: Due to modules and __init, code can
> - * disappear and change, we need to protect against faulting
> - * as well as code changing. We do this by using the
> - * probe_kernel_* functions.
> - *
> - * No real locking needed, this code is run through
> - * kstop_machine, or before SMP starts.
> + * Note:
> + * We are paranoid about modifying text, as if a bug were to happen, it

s/were/was/.

[...]

MBR, Sergei

2015-12-04 17:36:55

by Luck, Tony

[permalink] [raw]
Subject: RE: [PATCH 1/5] ia64: ftrace: fix the comments for ftrace_modify_code

> Suggested-by: Steven Rostedt <[email protected]>
> Signed-off-by: Li Bin <[email protected]>

Sure.

Acked-by: Tony Luck <[email protected]>

[assuming that Steven is going to apply this whole series]

-Tony

2015-12-05 17:13:52

by Thomas Gleixner

[permalink] [raw]
Subject: Re: [PATCH 5/5] x86: ftrace: fix the comments for ftrace_modify_code_direct

On Fri, 4 Dec 2015, Li Bin wrote:
> --- a/arch/x86/kernel/ftrace.c
> +++ b/arch/x86/kernel/ftrace.c
> @@ -106,13 +106,12 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
> unsigned char replaced[MCOUNT_INSN_SIZE];
>
> /*
> - * Note: Due to modules and __init, code can
> - * disappear and change, we need to protect against faulting
> - * as well as code changing. We do this by using the
> - * probe_kernel_* functions.
> - *
> - * No real locking needed, this code is run through
> - * kstop_machine, or before SMP starts.
> + * Note:
> + * We are paranoid about modifying text, as if a bug were to happen, it
> + * could cause us to read or write to someplace that could cause harm.
> + * Carefully read and modify the code with aarch64_insn_*() which uses

aarch64_insn_() is related to x86 in which way?

Thanks,

tglx

2015-12-05 22:52:38

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH 5/5] x86: ftrace: fix the comments for ftrace_modify_code_direct

On Sat, 5 Dec 2015 18:12:57 +0100 (CET)
Thomas Gleixner <[email protected]> wrote:

> On Fri, 4 Dec 2015, Li Bin wrote:
> > --- a/arch/x86/kernel/ftrace.c
> > +++ b/arch/x86/kernel/ftrace.c
> > @@ -106,13 +106,12 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
> > unsigned char replaced[MCOUNT_INSN_SIZE];
> >
> > /*
> > - * Note: Due to modules and __init, code can
> > - * disappear and change, we need to protect against faulting
> > - * as well as code changing. We do this by using the
> > - * probe_kernel_* functions.
> > - *
> > - * No real locking needed, this code is run through
> > - * kstop_machine, or before SMP starts.
> > + * Note:
> > + * We are paranoid about modifying text, as if a bug were to happen, it
> > + * could cause us to read or write to someplace that could cause harm.
> > + * Carefully read and modify the code with aarch64_insn_*() which uses
>
> aarch64_insn_() is related to x86 in which way?
>
>

The original comment is incorrect and we discussed this with the
arm64 code, and said the other archs need the comment updated as
well. But it seems that Li Bin just cut and pasted the arm64 patch for
the other archs, or at least with x86 (haven't looked at the others
yet). This needs to be fixed.

-- Steve

2015-12-06 02:07:07

by Li Bin

[permalink] [raw]
Subject: Re: [PATCH 5/5] x86: ftrace: fix the comments for ftrace_modify_code_direct



on 2015/12/6 6:52, Steven Rostedt wrote:
> On Sat, 5 Dec 2015 18:12:57 +0100 (CET)
> Thomas Gleixner <[email protected]> wrote:
>
>> On Fri, 4 Dec 2015, Li Bin wrote:
>>> --- a/arch/x86/kernel/ftrace.c
>>> +++ b/arch/x86/kernel/ftrace.c
>>> @@ -106,13 +106,12 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
>>> unsigned char replaced[MCOUNT_INSN_SIZE];
>>>
>>> /*
>>> - * Note: Due to modules and __init, code can
>>> - * disappear and change, we need to protect against faulting
>>> - * as well as code changing. We do this by using the
>>> - * probe_kernel_* functions.
>>> - *
>>> - * No real locking needed, this code is run through
>>> - * kstop_machine, or before SMP starts.
>>> + * Note:
>>> + * We are paranoid about modifying text, as if a bug were to happen, it
>>> + * could cause us to read or write to someplace that could cause harm.
>>> + * Carefully read and modify the code with aarch64_insn_*() which uses
>> aarch64_insn_() is related to x86 in which way?
>>
>>
> The original comment is incorrect and we discussed this with the
> arm64 code, and said the other archs need the comment updated as
> well. But it seems that Li Bin just cut and pasted the arm64 patch for
> the other archs, or at least with x86 (haven't looked at the others
> yet). This needs to be fixed.

Sorry for my mistake, I will modify it.

Thanks,
Li Bin

> -- Steve
>
> .
>