All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andi Kleen <andi@firstfloor.org>,
	Jiri Slaby <jirislaby@gmail.com>,
	David Miller <davem@davemloft.net>,
	zdenek.kabelac@gmail.com, rjw@sisk.pl,
	paulmck@linux.vnet.ibm.com, akpm@linux-foundation.org,
	linux-ext4@vger.kernel.org, herbert@gondor.apana.org.au,
	penberg@cs.helsinki.fi, clameter@sgi.com,
	linux-kernel@vger.kernel.org,
	Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>,
	pageexec@freemail.hu, "H. Peter Anvin" <hpa@zytor.com>,
	Jeremy Fitzhardinge <jeremy@goop.org>
Subject: Re: [PATCH 1/1] x86: fix text_poke
Date: Fri, 25 Apr 2008 19:02:37 +0200	[thread overview]
Message-ID: <20080425170237.GA24472@elte.hu> (raw)
In-Reply-To: <alpine.LFD.1.10.0804250950360.2779@woody.linux-foundation.org>


* Linus Torvalds <torvalds@linux-foundation.org> wrote:

> On Fri, 25 Apr 2008, Ingo Molnar wrote:
> > 
> > ah, on 64-bit. That we better make consistent anyway, via the patch 
> > below. set_pte_phys() needs to become non-init as well.
> 
> Make it return the "pte_t *", and now you don't have to walk the page 
> tables twice to just clear it immediately afterwards. At that point I 
> think my patch will be happy and useful, but I also worry a bit 
> whether it was worth the changes..

performance i dont think we should be too worried about at this moment - 
this code is so rarely used that it should be driven by robustness i 
think.

one theoretical worry i have is that we've got the pending immediate 
values changes from Mathieu. Those end up removing the original 
BUG_ON(len > sizeof(long)) restriction (and the alignment check) and 
uses a carefully crafted (but scary as hell) sequence of text_poke() 
sequences to turn a marker into a single-instruction NOP when the marker 
is inactive.

Single-instruction NOP markers is a rather ... tempting goal and it can 
(and must be able to) patch instructions across page boundaries as well.

i think with the PageReserved WARN_ON() we should be sufficiently 
protected against stray scribbles so Mathieu's fix might be usable as 
well - see it below.

Note that the BUG_ON()s at the end of the text_poke() version below 
should have caught this bug too i think - because the bug was due to 
mis-mapping the pages due to the incorrect kernel_text_address() 
condition so we'd have noticed that the expected bits did not end up in 
the right place.

	Ingo


----------------------->
Subject: Fix sched-devel text_poke
From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Date: Thu, 24 Apr 2008 11:03:33 -0400

Use core_text_address() instead of kernel_text_address(). Deal with modules in
the same way used for the core kernel.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
 arch/x86/kernel/alternative.c |   38 ++++++++++++++++++--------------------
 1 file changed, 18 insertions(+), 20 deletions(-)

Index: linux/arch/x86/kernel/alternative.c
===================================================================
--- linux.orig/arch/x86/kernel/alternative.c
+++ linux/arch/x86/kernel/alternative.c
@@ -511,31 +511,29 @@ void *__kprobes text_poke(void *addr, co
 	unsigned long flags;
 	char *vaddr;
 	int nr_pages = 2;
+	struct page *pages[2];
+	int i;
 
-	BUG_ON(len > sizeof(long));
-	BUG_ON((((long)addr + len - 1) & ~(sizeof(long) - 1))
-		- ((long)addr & ~(sizeof(long) - 1)));
-	if (kernel_text_address((unsigned long)addr)) {
-		struct page *pages[2] = { virt_to_page(addr),
-			virt_to_page(addr + PAGE_SIZE) };
-		if (!pages[1])
-			nr_pages = 1;
-		vaddr = vmap(pages, nr_pages, VM_MAP, PAGE_KERNEL);
-		BUG_ON(!vaddr);
-		local_irq_save(flags);
-		memcpy(&vaddr[(unsigned long)addr & ~PAGE_MASK], opcode, len);
-		local_irq_restore(flags);
-		vunmap(vaddr);
+	if (!core_kernel_text((unsigned long)addr)) {
+		pages[0] = vmalloc_to_page(addr);
+		pages[1] = vmalloc_to_page(addr + PAGE_SIZE);
 	} else {
-		/*
-		 * modules are in vmalloc'ed memory, always writable.
-		 */
-		local_irq_save(flags);
-		memcpy(addr, opcode, len);
-		local_irq_restore(flags);
+		pages[0] = virt_to_page(addr);
+		pages[1] = virt_to_page(addr + PAGE_SIZE);
 	}
+	BUG_ON(!pages[0]);
+	if (!pages[1])
+		nr_pages = 1;
+	vaddr = vmap(pages, nr_pages, VM_MAP, PAGE_KERNEL);
+	BUG_ON(!vaddr);
+	local_irq_save(flags);
+	memcpy(&vaddr[(unsigned long)addr & ~PAGE_MASK], opcode, len);
+	local_irq_restore(flags);
+	vunmap(vaddr);
 	sync_core();
 	/* Could also do a CLFLUSH here to speed up CPU recovery; but
 	   that causes hangs on some VIA CPUs. */
+	for (i = 0; i < len; i++)
+		BUG_ON(((char *)addr)[i] != ((char *)opcode)[i]);
 	return addr;
 }

  reply	other threads:[~2008-04-25 17:03 UTC|newest]

Thread overview: 211+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-19 13:22 2.6.25-git1: Solid hang on HP nx6325 (64-bit) Rafael J. Wysocki
2008-04-20 19:04 ` 2.6.25-git2: BUG: unable to handle kernel paging request at ffffffffffffffff Rafael J. Wysocki
2008-04-20 19:04   ` Rafael J. Wysocki
2008-04-20 19:14   ` Rafael J. Wysocki
2008-04-20 19:14     ` Rafael J. Wysocki
2008-04-20 21:31   ` Linus Torvalds
2008-04-21  1:18     ` Herbert Xu
2008-04-21  2:08       ` Paul E. McKenney
2008-04-21  4:59         ` Paul E. McKenney
2008-04-21  5:47           ` Paul E. McKenney
2008-04-21 13:00             ` Ingo Molnar
2008-04-21 16:06             ` Linus Torvalds
2008-04-21 16:24               ` Rafael J. Wysocki
2008-04-21 15:49         ` Linus Torvalds
2008-04-21 17:05           ` Paul E. McKenney
2008-04-21 17:30             ` Linus Torvalds
2008-04-21 17:43               ` Paul E. McKenney
2008-04-22  1:03           ` Herbert Xu
2008-04-22 13:36             ` Paul E. McKenney
2008-04-21 16:12     ` Rafael J. Wysocki
2008-04-21 16:54       ` Linus Torvalds
2008-04-21 17:06         ` Jiri Slaby
2008-04-21 17:19           ` Rafael J. Wysocki
2008-04-21 17:48           ` Linus Torvalds
2008-04-21 18:22             ` Rafael J. Wysocki
2008-04-21 18:22               ` Rafael J. Wysocki
2008-04-21 19:38             ` Jiri Slaby
2008-04-21 20:39         ` David Miller
2008-04-21 21:18           ` Jiri Slaby
2008-04-21 21:58             ` Jiri Slaby
2008-04-21 22:26               ` Jiri Slaby
2008-04-21 22:54                 ` Paul E. McKenney
2008-04-21 23:02                   ` Jiri Slaby
2008-04-21 23:02                     ` Jiri Slaby
2008-04-21 23:11                     ` Zdenek Kabelac
2008-04-21 23:11                       ` Zdenek Kabelac
2008-04-21 23:17                     ` Jiri Slaby
2008-04-22  0:54                       ` Rafael J. Wysocki
2008-04-22  1:14                         ` Linus Torvalds
2008-04-22  1:30                           ` Rafael J. Wysocki
2008-04-22  9:49                           ` Jiri Slaby
2008-04-22  9:53                             ` Ingo Molnar
2008-04-22 18:35                               ` Zdenek Kabelac
2008-04-22 18:48                                 ` Linus Torvalds
2008-04-22 20:34                                   ` device_pm_add (was: Re: 2.6.25-git2: BUG: unable to handle kernel paging request at ffffffffffffffff) Rafael J. Wysocki
2008-04-22 20:34                                   ` Rafael J. Wysocki
2008-04-22 20:57                                     ` Rafael J. Wysocki
2008-04-22 22:11                                       ` Greg KH
2008-04-22 22:11                                       ` Greg KH
2008-04-22 20:57                                     ` Rafael J. Wysocki
2008-04-22 20:58                                     ` Linus Torvalds
2008-04-22 20:58                                       ` Linus Torvalds
2008-04-22 22:12                                       ` Greg KH
2008-04-22 22:12                                       ` Greg KH
2008-04-22 22:48                                       ` Rafael J. Wysocki
2008-04-22 22:48                                       ` Rafael J. Wysocki
2008-04-23  0:50                                       ` Rafael J. Wysocki
2008-04-23  0:50                                       ` Rafael J. Wysocki
2008-04-23 14:56                                         ` Alan Stern
2008-04-23 14:56                                         ` Alan Stern
2008-04-23  8:50                                   ` 2.6.25-git2: BUG: unable to handle kernel paging request at ffffffffffffffff Zdenek Kabelac
2008-04-23  8:50                                     ` Zdenek Kabelac
2008-04-23 15:53                                     ` Linus Torvalds
2008-04-23 15:53                                       ` Linus Torvalds
2008-04-23 16:58                                       ` Pekka Enberg
2008-04-23 16:58                                         ` Pekka Enberg
2008-04-23 17:28                                         ` Zdenek Kabelac
2008-04-23 17:28                                           ` Zdenek Kabelac
2008-04-23 17:40                                       ` Ingo Molnar
2008-04-23 18:52                                       ` Pekka Enberg
2008-04-23 19:05                                         ` Christoph Lameter
2008-04-23 19:19                                           ` Pekka J Enberg
2008-04-23 19:28                                             ` Christoph Lameter
2008-04-23 20:27                                             ` Zdenek Kabelac
2008-04-24 22:26                                       ` Jiri Slaby
2008-04-24 22:41                                         ` Linus Torvalds
2008-04-25  0:57                                           ` Jiri Slaby
2008-04-24 23:45                                             ` Linus Torvalds
2008-04-25  7:36                                               ` Jiri Slaby
2008-04-25 14:09                                                 ` Pavel Machek
2008-04-25 15:30                                                 ` Rafael J. Wysocki
2008-04-25 17:10                                           ` Jiri Slaby
2008-04-25  9:13                                             ` David Miller
2008-04-25 12:15                                               ` Zdenek Kabelac
2008-04-25 12:27                                                 ` Zdenek Kabelac
2008-04-25 15:12                                               ` [PATCH 1/1] x86: fix text_poke Jiri Slaby
2008-04-28  0:51                                                 ` Jiri Slaby
2008-04-25 15:03                                                 ` Linus Torvalds
2008-04-25 15:17                                                   ` Andi Kleen
2008-04-25 19:36                                                     ` Christoph Lameter
2008-04-26  9:59                                                       ` Andi Kleen
2008-04-26 11:16                                                         ` Jiri Slaby
2008-04-26 11:34                                                           ` Andi Kleen
2008-04-28 20:24                                                         ` VIRTUAL_BUG_ON() Christoph Lameter
2008-05-01 19:22                                                           ` [RFC 1/1] mm: add virt to phys debug Jiri Slaby
2008-05-01 19:22                                                             ` Jiri Slaby
2008-05-01 19:22                                                             ` Jiri Slaby
2008-05-01 20:18                                                             ` Christoph Lameter
2008-05-01 20:18                                                               ` Christoph Lameter
2008-05-06 21:54                                                               ` Jiri Slaby
2008-05-06 21:54                                                                 ` Jiri Slaby
2008-05-07 17:30                                                                 ` Christoph Lameter
2008-05-07 17:30                                                                   ` Christoph Lameter
2008-05-13 14:38                                                               ` Jiri Slaby
2008-05-13 14:38                                                                 ` Jiri Slaby
2008-04-25 15:19                                                   ` [PATCH 1/1] x86: fix text_poke Ingo Molnar
2008-04-25 15:26                                                     ` Ingo Molnar
2008-04-25 15:32                                                       ` Ingo Molnar
2008-04-25 15:33                                                       ` Linus Torvalds
2008-04-25 15:48                                                         ` Andi Kleen
2008-04-25 16:06                                                           ` Linus Torvalds
2008-04-25 16:19                                                             ` Andi Kleen
2008-04-25 16:24                                                               ` Linus Torvalds
2008-04-25 16:33                                                                 ` Ingo Molnar
2008-04-25 18:13                                                                 ` Jeremy Fitzhardinge
2008-05-05  2:36                                                                   ` Nick Piggin
2008-04-25 16:30                                                               ` Mathieu Desnoyers
2008-04-25 16:42                                                                 ` H. Peter Anvin
2008-04-25 17:09                                                                   ` Mathieu Desnoyers
2008-04-25 18:37                                                                     ` Mathieu Desnoyers
2008-04-25 18:47                                                                       ` H. Peter Anvin
2008-04-25 19:19                                                                       ` H. Peter Anvin
2008-04-25 20:04                                                                         ` Mathieu Desnoyers
2008-04-25 20:09                                                                           ` H. Peter Anvin
2008-04-25 20:18                                                                       ` H. Peter Anvin
2008-04-25 20:37                                                                         ` Mathieu Desnoyers
2008-04-25 20:41                                                                           ` H. Peter Anvin
2008-04-25 20:51                                                                             ` Linus Torvalds
2008-04-25 21:12                                                                               ` Mathieu Desnoyers
2008-04-25 21:15                                                                                 ` H. Peter Anvin
2008-04-25 21:47                                                                                   ` Mathieu Desnoyers
2008-04-25 22:07                                                                                     ` H. Peter Anvin
2008-04-25 22:30                                                                                       ` Mathieu Desnoyers
2008-04-25 22:36                                                                                         ` Linus Torvalds
2008-04-28 20:21                                                                                           ` Ingo Molnar
2008-04-28 20:55                                                                                             ` Jeremy Fitzhardinge
2008-04-28 21:01                                                                                               ` H. Peter Anvin
2008-04-28 22:42                                                                                                 ` Mathieu Desnoyers
2008-04-28 20:43                                                                                           ` Mathieu Desnoyers
2008-04-28 21:02                                                                                             ` Jeremy Fitzhardinge
2008-05-04 15:03                                                                                               ` Mathieu Desnoyers
2008-05-04 16:18                                                                                                 ` H. Peter Anvin
2008-04-25 22:38                                                                                         ` H. Peter Anvin
2008-04-25 22:04                                                                                 ` Linus Torvalds
2008-04-25 23:00                                                                                   ` Mathieu Desnoyers
2008-04-25 23:13                                                                                     ` Jeremy Fitzhardinge
2008-04-25 23:34                                                                                       ` Masami Hiramatsu
2008-04-26  6:21                                                                                         ` Jeremy Fitzhardinge
2008-04-26 11:56                                                                                           ` Arnaldo Carvalho de Melo
2008-04-26 23:38                                                                                             ` Jeremy Fitzhardinge
2008-04-26 23:38                                                                                               ` Jeremy Fitzhardinge
2008-04-27  1:00                                                                                               ` Arnaldo Carvalho de Melo
2008-04-26  2:12                                                                                   ` Frank Ch. Eigler
2008-06-05 17:44                                                                                   ` Frank Ch. Eigler
2008-04-26  6:50                                                                                 ` Jeremy Fitzhardinge
2008-04-28  0:49                                                                                   ` Masami Hiramatsu
2008-04-25 21:02                                                                             ` David Miller
2008-04-25 21:11                                                                               ` H. Peter Anvin
2008-04-25 16:22                                                             ` Ingo Molnar
2008-04-25 16:37                                                               ` Linus Torvalds
2008-04-25 16:43                                                                 ` Ingo Molnar
2008-04-25 16:43                                                                   ` Ingo Molnar
2008-04-25 16:45                                                                 ` Ingo Molnar
2008-04-25 16:51                                                                   ` Linus Torvalds
2008-04-25 17:02                                                                     ` Ingo Molnar [this message]
2008-04-25 17:13                                                                       ` Linus Torvalds
2008-04-25 17:26                                                                         ` Andi Kleen
2008-04-25 17:29                                                                           ` Linus Torvalds
2008-04-25 17:53                                                                         ` Ingo Molnar
2008-04-25 18:04                                                                           ` Ingo Molnar
2008-04-25 18:09                                                                           ` Linus Torvalds
2008-04-25 18:19                                                                             ` Ingo Molnar
2008-04-25 18:19                                                                               ` Ingo Molnar
2008-04-25 18:56                                                                               ` Ingo Molnar
2008-04-25 18:13                                                                           ` Ingo Molnar
2008-04-25 16:52                                                                 ` Ingo Molnar
2008-04-25 16:56                                                                 ` Andi Kleen
2008-04-25 15:50                                                         ` Ingo Molnar
2008-04-25 15:57                                                           ` H. Peter Anvin
2008-04-25 18:53                                                             ` Pavel Machek
2008-04-25 16:11                                                           ` Linus Torvalds
2008-04-25 15:54                                                         ` Mathieu Desnoyers
2008-04-25 15:59                                                           ` Ingo Molnar
2008-04-25 16:11                                                             ` Mathieu Desnoyers
2008-04-25 15:27                                                     ` Andi Kleen
2008-04-25 20:18                                                   ` David Miller
2008-04-25 15:23                                               ` Jiri Slaby
2008-04-25  1:35                                         ` 2.6.25-git2: BUG: unable to handle kernel paging request at ffffffffffffffff David Miller
2008-04-25  1:48                                           ` Linus Torvalds
2008-04-25  1:57                                             ` David Miller
2008-04-25  7:41                                               ` Jiri Slaby
2008-04-25  7:45                                                 ` David Miller
2008-04-25  8:02                                                   ` Jiri Slaby
2008-04-25  8:18                                                   ` pci commands resume order [Was: 2.6.25-git2: BUG: unable to handle kernel paging request at ffffffffffffffff] Jiri Slaby
2008-04-25 17:11                                                     ` Jesse Barnes
2008-04-25 10:53                                                   ` 2.6.25-git2: BUG: unable to handle kernel paging request at ffffffffffffffff Craig Schlenter
2008-04-25  7:42                                           ` Jiri Slaby
2008-04-25  7:49                                             ` David Miller
2008-04-25  7:56                                               ` Jiri Slaby
2008-04-25  7:58                                                 ` David Miller
2008-04-25  8:00                                                   ` Jiri Slaby
2008-04-25 15:47                                                     ` Randy Dunlap
2008-04-22 21:46                                 ` Rafael J. Wysocki
2008-04-22 19:09                               ` Ingo Molnar
2008-04-22  1:15                   ` Rafael J. Wysocki
2008-04-22  1:25                     ` [ProbableSpam]Re: " Paul E. McKenney
2008-04-21 21:19           ` Linus Torvalds
2008-04-21 21:54             ` David Miller
2008-04-21 13:17   ` Ingo Molnar
2008-04-21 13:35     ` Rafael J. Wysocki
2008-04-21 18:56       ` Ingo Molnar

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=20080425170237.GA24472@elte.hu \
    --to=mingo@elte.hu \
    --cc=akpm@linux-foundation.org \
    --cc=andi@firstfloor.org \
    --cc=clameter@sgi.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.apana.org.au \
    --cc=hpa@zytor.com \
    --cc=jeremy@goop.org \
    --cc=jirislaby@gmail.com \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@polymtl.ca \
    --cc=pageexec@freemail.hu \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=penberg@cs.helsinki.fi \
    --cc=rjw@sisk.pl \
    --cc=torvalds@linux-foundation.org \
    --cc=zdenek.kabelac@gmail.com \
    /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.