All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Suresh Siddha <suresh.b.siddha@intel.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
	rostedt@goodmis.org, suresh.b.siddha@intel.com,
	tglx@linutronix.de, mingo@elte.hu
Subject: [tip:x86/mm] x86_64, ftrace: Make ftrace use kernel identity mapping to modify code
Date: Mon, 2 Nov 2009 18:54:51 GMT	[thread overview]
Message-ID: <tip-55ca3cc1746335bb6ef1d3894ddb6d0c729b3518@git.kernel.org> (raw)
In-Reply-To: <20091029024821.080941108@sbs-t61.sc.intel.com>

Commit-ID:  55ca3cc1746335bb6ef1d3894ddb6d0c729b3518
Gitweb:     http://git.kernel.org/tip/55ca3cc1746335bb6ef1d3894ddb6d0c729b3518
Author:     Suresh Siddha <suresh.b.siddha@intel.com>
AuthorDate: Wed, 28 Oct 2009 18:46:57 -0800
Committer:  Ingo Molnar <mingo@elte.hu>
CommitDate: Mon, 2 Nov 2009 17:16:36 +0100

x86_64, ftrace: Make ftrace use kernel identity mapping to modify code

On x86_64, kernel text mappings are mapped read-only with
CONFIG_DEBUG_RODATA. So use the kernel identity mapping instead
of the kernel text mapping to modify the kernel text.

Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Tested-by: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <20091029024821.080941108@sbs-t61.sc.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 arch/x86/kernel/ftrace.c |   17 +++++++++++++++++
 arch/x86/mm/pageattr.c   |    3 +--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
index 9dbb527..944e982 100644
--- a/arch/x86/kernel/ftrace.c
+++ b/arch/x86/kernel/ftrace.c
@@ -187,9 +187,26 @@ static void wait_for_nmi(void)
 	nmi_wait_count++;
 }
 
+static inline int
+within(unsigned long addr, unsigned long start, unsigned long end)
+{
+	return addr >= start && addr < end;
+}
+
 static int
 do_ftrace_mod_code(unsigned long ip, void *new_code)
 {
+	/*
+	 * On x86_64, kernel text mappings are mapped read-only with
+	 * CONFIG_DEBUG_RODATA. So we use the kernel identity mapping instead
+	 * of the kernel text mapping to modify the kernel text.
+	 *
+	 * For 32bit kernels, these mappings are same and we can use
+	 * kernel identity mapping to modify code.
+	 */
+	if (within(ip, (unsigned long)_text, (unsigned long)_etext))
+		ip = (unsigned long)__va(__pa(ip));
+
 	mod_code_ip = (void *)ip;
 	mod_code_newcode = new_code;
 
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 8d1e8d9..09a140c 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -279,8 +279,7 @@ static inline pgprot_t static_protections(pgprot_t prot, unsigned long address,
 		   __pa((unsigned long)__end_rodata) >> PAGE_SHIFT))
 		pgprot_val(forbidden) |= _PAGE_RW;
 
-#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) && \
-	!defined(CONFIG_DYNAMIC_FTRACE)
+#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA)
 	/*
 	 * Once the kernel maps the text as RO (kernel_set_to_readonly is set),
 	 * kernel text mappings for the large page aligned text, rodata sections

  reply	other threads:[~2009-11-02 18:55 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-29  2:46 [patch 1/3] x86, cpa: fix kernel text RO checks in static_protection() Suresh Siddha
2009-10-29  2:05 ` Steven Rostedt
2009-10-29  2:46 ` [patch 2/3] x86_64, ftrace: make ftrace use kernel identity mapping to modify code Suresh Siddha
2009-11-02 18:54   ` tip-bot for Suresh Siddha [this message]
2009-10-29  2:46 ` [patch 3/3] x86_64, cpa: use only text section in set_kernel_text_rw/ro Suresh Siddha
2009-10-29  2:06   ` Steven Rostedt
2009-10-30 19:17     ` Suresh Siddha
2009-10-30 19:59       ` Steven Rostedt
2009-11-02 18:55   ` [tip:x86/mm] x86_64, cpa: Use " tip-bot for Suresh Siddha
2009-11-02 18:54 ` [tip:x86/mm] x86, cpa: Fix kernel text RO checks in static_protection() tip-bot for Suresh Siddha

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=tip-55ca3cc1746335bb6ef1d3894ddb6d0c729b3518@git.kernel.org \
    --to=suresh.b.siddha@intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=mingo@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /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.