All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wright <chrisw@sous-sol.org>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: Justin Forbes <jmforbes@linuxtx.org>,
	Zwane Mwaikambo <zwane@arm.linux.org.uk>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Randy Dunlap <rdunlap@xenotime.net>,
	Dave Jones <davej@redhat.com>,
	Chuck Wolber <chuckw@quantumlinux.com>,
	Chris Wedgwood <reviews@ml.cw.f00f.org>,
	torvalds@osdl.org, akpm@osdl.org, alan@lxorguk.ukuu.org.uk,
	David Miller <davem@davemloft.net>,
	Greg Kroah-Hartman <gregkh@suse.de>
Subject: [PATCH 02/13] SPARC64: Fix D-cache corruption in mremap
Date: Tue, 20 Jun 2006 00:00:02 -0700	[thread overview]
Message-ID: <20060620114628.498986000@sous-sol.org> (raw)
In-Reply-To: 20060620114527.934114000@sous-sol.org

[-- Attachment #1: sparc64-fix-d-cache-corruption-in-mremap.patch --]
[-- Type: text/plain, Size: 3073 bytes --]

-stable review patch.  If anyone has any objections, please let us know.
------------------

From: David Miller <davem@davemloft.net>

If we move a mapping from one virtual address to another,
and this changes the virtual color of the mapping to those
pages, we can see corrupt data due to D-cache aliasing.

Check for and deal with this by overriding the move_pte()
macro.  Set things up so that other platforms can cleanly
override the move_pte() macro too.

This long standing bug corrupts user memory, and in particular
has been notorious for corrupting Debian package database
files on sparc64 boxes.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---

 include/asm-generic/pgtable.h |   11 +----------
 include/asm-mips/pgtable.h    |   10 +++++++++-
 include/asm-sparc64/pgtable.h |   17 +++++++++++++++++
 3 files changed, 27 insertions(+), 11 deletions(-)

--- linux-2.6.16.21.orig/include/asm-generic/pgtable.h
+++ linux-2.6.16.21/include/asm-generic/pgtable.h
@@ -159,17 +159,8 @@ static inline void ptep_set_wrprotect(st
 #define lazy_mmu_prot_update(pte)	do { } while (0)
 #endif
 
-#ifndef __HAVE_ARCH_MULTIPLE_ZERO_PAGE
+#ifndef __HAVE_ARCH_MOVE_PTE
 #define move_pte(pte, prot, old_addr, new_addr)	(pte)
-#else
-#define move_pte(pte, prot, old_addr, new_addr)				\
-({									\
- 	pte_t newpte = (pte);						\
-	if (pte_present(pte) && pfn_valid(pte_pfn(pte)) &&		\
-			pte_page(pte) == ZERO_PAGE(old_addr))		\
-		newpte = mk_pte(ZERO_PAGE(new_addr), (prot));		\
-	newpte;								\
-})
 #endif
 
 /*
--- linux-2.6.16.21.orig/include/asm-mips/pgtable.h
+++ linux-2.6.16.21/include/asm-mips/pgtable.h
@@ -70,7 +70,15 @@ extern unsigned long zero_page_mask;
 #define ZERO_PAGE(vaddr) \
 	(virt_to_page(empty_zero_page + (((unsigned long)(vaddr)) & zero_page_mask)))
 
-#define __HAVE_ARCH_MULTIPLE_ZERO_PAGE
+#define __HAVE_ARCH_MOVE_PTE
+#define move_pte(pte, prot, old_addr, new_addr)				\
+({									\
+ 	pte_t newpte = (pte);						\
+	if (pte_present(pte) && pfn_valid(pte_pfn(pte)) &&		\
+			pte_page(pte) == ZERO_PAGE(old_addr))		\
+		newpte = mk_pte(ZERO_PAGE(new_addr), (prot));		\
+	newpte;								\
+})
 
 extern void paging_init(void);
 
--- linux-2.6.16.21.orig/include/asm-sparc64/pgtable.h
+++ linux-2.6.16.21/include/asm-sparc64/pgtable.h
@@ -335,6 +335,23 @@ static inline void set_pte_at(struct mm_
 #define pte_clear(mm,addr,ptep)		\
 	set_pte_at((mm), (addr), (ptep), __pte(0UL))
 
+#ifdef DCACHE_ALIASING_POSSIBLE
+#define __HAVE_ARCH_MOVE_PTE
+#define move_pte(pte, prot, old_addr, new_addr)				\
+({									\
+ 	pte_t newpte = (pte);						\
+	if (pte_present(pte)) {						\
+		unsigned long this_pfn = pte_pfn(pte);			\
+									\
+		if (pfn_valid(this_pfn) &&				\
+		    (((old_addr) ^ (new_addr)) & (1 << 13)))		\
+			flush_dcache_page_all(current->mm,		\
+					      pfn_to_page(this_pfn));	\
+	}								\
+	newpte;								\
+})
+#endif
+
 extern pgd_t swapper_pg_dir[2048];
 extern pmd_t swapper_low_pmd_dir[2048];
 

--

  parent reply	other threads:[~2006-06-20 11:49 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-06-20 11:45 [PATCH 00/13] -stable review Chris Wright
2006-06-20  7:00 ` [PATCH 01/13] USB: Whiteheat: fix firmware spurious errors Chris Wright
2006-06-20  7:00 ` Chris Wright [this message]
2006-06-20  7:00 ` [PATCH 03/13] SPARC64: Respect gfp_t argument to dma_alloc_coherent() Chris Wright
2006-06-20  7:00 ` [PATCH 04/13] SPARC64: Fix missing fold at end of checksums Chris Wright
2006-06-20  7:00 ` [PATCH 05/13] [PATCH] Missed error checking for intents filp in open_namei() Chris Wright
2006-06-20  7:00 ` [PATCH 06/13] tmpfs: time granularity fix for [acm]time going backwards Chris Wright
2006-06-20  7:00 ` [PATCH 07/13] SERIAL: PARPORT_SERIAL should depend on SERIAL_8250_PCI Chris Wright
2006-06-29 17:31   ` Michael Tokarev
2006-06-29 17:37     ` Russell King
2006-06-29 18:12       ` Chris Wright
2006-06-29 18:17         ` Michael Tokarev
2006-06-20  7:00 ` [PATCH 08/13] fs/namei.c: Call to file_permission() under a spinlock in do_lookup_path() Chris Wright
2006-06-20  7:00 ` [PATCH 09/13] JFS: Fix multiple errors in metapage_releasepage Chris Wright
2006-06-20  7:00 ` [PATCH 10/13] scsi_lib.c: properly count the number of pages in scsi_req_map_sg() Chris Wright
2006-06-20  7:00 ` [PATCH 11/13] I2O: Bugfixes to get I2O working again Chris Wright
2006-06-20  7:00 ` [PATCH 12/13] powernow-k8 crash workaround Chris Wright
2006-06-20  7:00 ` [PATCH 13/13] NTFS: Critical bug fix (affects MIPS and possibly others) Chris Wright

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=20060620114628.498986000@sous-sol.org \
    --to=chrisw@sous-sol.org \
    --cc=akpm@osdl.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=chuckw@quantumlinux.com \
    --cc=davej@redhat.com \
    --cc=davem@davemloft.net \
    --cc=gregkh@suse.de \
    --cc=jmforbes@linuxtx.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rdunlap@xenotime.net \
    --cc=reviews@ml.cw.f00f.org \
    --cc=stable@kernel.org \
    --cc=torvalds@osdl.org \
    --cc=tytso@mit.edu \
    --cc=zwane@arm.linux.org.uk \
    /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.