2020-01-13 07:20:16

by Cheng Jian

[permalink] [raw]
Subject: [PATCH] x86/ftrace: usr ftrace_write to simplify code

ftrace_write() can be used directly in ftrace_modify_code_direct(),
that make the code more brief.

Signed-off-by: Cheng Jian <[email protected]>
---
arch/x86/kernel/ftrace.c | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index 024c3053dbba..6b36ed2fd04d 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -114,6 +114,16 @@ static const unsigned char *ftrace_nop_replace(void)
return ideal_nops[NOP_ATOMIC5];
}

+static int ftrace_write(unsigned long ip, const char *val, int size)
+{
+ ip = text_ip_addr(ip);
+
+ if (probe_kernel_write((void *)ip, val, size))
+ return -EPERM;
+
+ return 0;
+}
+
static int
ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
unsigned const char *new_code)
@@ -138,10 +148,8 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
if (memcmp(replaced, old_code, MCOUNT_INSN_SIZE) != 0)
return -EINVAL;

- ip = text_ip_addr(ip);
-
/* replace the text with the new text */
- if (probe_kernel_write((void *)ip, new_code, MCOUNT_INSN_SIZE))
+ if (ftrace_write(ip, new_code, MCOUNT_INSN_SIZE))
return -EPERM;

sync_core();
@@ -326,16 +334,6 @@ int ftrace_int3_handler(struct pt_regs *regs)
}
NOKPROBE_SYMBOL(ftrace_int3_handler);

-static int ftrace_write(unsigned long ip, const char *val, int size)
-{
- ip = text_ip_addr(ip);
-
- if (probe_kernel_write((void *)ip, val, size))
- return -EPERM;
-
- return 0;
-}
-
static int add_break(unsigned long ip, const char *old)
{
unsigned char replaced[MCOUNT_INSN_SIZE];
--
2.17.1


2020-01-14 01:39:21

by Cheng Jian

[permalink] [raw]
Subject: Re: [PATCH] x86/ftrace: usr ftrace_write to simplify code

I am sorry.

usr => use in subject.

I will resend this patch.

 --Cheng Jian

On 2020/1/13 15:33, Cheng Jian wrote:
> ftrace_write() can be used directly in ftrace_modify_code_direct(),
> that make the code more brief.
>
> Signed-off-by: Cheng Jian <[email protected]>
> ---
> arch/x86/kernel/ftrace.c | 24 +++++++++++-------------
> 1 file changed, 11 insertions(+), 13 deletions(-)
>
> diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
> index 024c3053dbba..6b36ed2fd04d 100644
> --- a/arch/x86/kernel/ftrace.c
> +++ b/arch/x86/kernel/ftrace.c
> @@ -114,6 +114,16 @@ static const unsigned char *ftrace_nop_replace(void)
> return ideal_nops[NOP_ATOMIC5];
> }
>
> +static int ftrace_write(unsigned long ip, const char *val, int size)
> +{
> + ip = text_ip_addr(ip);
> +
> + if (probe_kernel_write((void *)ip, val, size))
> + return -EPERM;
> +
> + return 0;
> +}
> +
> static int
> ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
> unsigned const char *new_code)
> @@ -138,10 +148,8 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
> if (memcmp(replaced, old_code, MCOUNT_INSN_SIZE) != 0)
> return -EINVAL;
>
> - ip = text_ip_addr(ip);
> -
> /* replace the text with the new text */
> - if (probe_kernel_write((void *)ip, new_code, MCOUNT_INSN_SIZE))
> + if (ftrace_write(ip, new_code, MCOUNT_INSN_SIZE))
> return -EPERM;
>
> sync_core();
> @@ -326,16 +334,6 @@ int ftrace_int3_handler(struct pt_regs *regs)
> }
> NOKPROBE_SYMBOL(ftrace_int3_handler);
>
> -static int ftrace_write(unsigned long ip, const char *val, int size)
> -{
> - ip = text_ip_addr(ip);
> -
> - if (probe_kernel_write((void *)ip, val, size))
> - return -EPERM;
> -
> - return 0;
> -}
> -
> static int add_break(unsigned long ip, const char *old)
> {
> unsigned char replaced[MCOUNT_INSN_SIZE];

2020-01-14 03:48:29

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH] x86/ftrace: usr ftrace_write to simplify code

On Tue, 14 Jan 2020 09:37:41 +0800
"chengjian (D)" <[email protected]> wrote:

> I am sorry.
>
> usr => use in subject.
>
> I will resend this patch.
>

I already pulled the original patch into my queue, but I did fix the
typo (and also capitalized the first word to "Use").

It's currently running through my tests.

-- Steve

2020-01-14 09:16:02

by Cheng Jian

[permalink] [raw]
Subject: Re: [PATCH] x86/ftrace: usr ftrace_write to simplify code


On 2020/1/14 11:34, Steven Rostedt wrote:
> On Tue, 14 Jan 2020 09:37:41 +0800
> "chengjian (D)" <[email protected]> wrote:
>
>> I am sorry.
>>
>> usr => use in subject.
>>
>> I will resend this patch.
>>
> I already pulled the original patch into my queue, but I did fix the
> typo (and also capitalized the first word to "Use").
>
> It's currently running through my tests.
>
> -- Steve
>
> .


Thank you very much, Steven.


But peter has optimized the logic here, and those patches have been

applied to the tip branch, so my patch may not be needed.


https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git/commit/?id=768ae4406a5cab7e8702550f2446dbeb377b798d

https://lkml.org/lkml/2020/1/14/123



-- Cheng Jian