From: Greg Kroah-Hartman Date: Tue, 20 Mar 2007 04:18:05 +0000 (-0700) Subject: sparc patch added to queue X-Git-Tag: v2.6.20.4~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=267201b9f7ffdcca3490a14a64dd0a8b75bb9d1c;p=thirdparty%2Fkernel%2Fstable-queue.git sparc patch added to queue --- diff --git a/review-2.6.20/fix-niagara-memory-corruption.patch b/review-2.6.20/fix-niagara-memory-corruption.patch new file mode 100644 index 00000000000..264067ae963 --- /dev/null +++ b/review-2.6.20/fix-niagara-memory-corruption.patch @@ -0,0 +1,83 @@ +From stable-bounces@linux.kernel.org Mon Mar 19 21:16:53 2007 +From: David Miller +Date: Mon, 19 Mar 2007 14:50:04 -0700 (PDT) +Subject: Fix niagara memory corruption +To: stable@kernel.org +Cc: bunk@stusta.de +Message-ID: <20070319.145004.21927270.davem@davemloft.net> + +From: David Miller + +[SPARC64]: store-init needs trailing membar. + +The manual says that it is required and we actually have crash reports +where loads see stale data due to not having membars here. + +In one case the networking does: + + memset(skb, 0, offsetof(struct sk_buff, truesize)); + +and then some code later checks skb->nohdr for zero, but it's still +the value that was there before the memset(). + +Note that arch/sparc64/lib/xor.S already got this right. + +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman + +--- + arch/sparc64/kernel/tsb.S | 1 + + arch/sparc64/lib/NGbzero.S | 1 + + arch/sparc64/lib/NGmemcpy.S | 2 ++ + arch/sparc64/lib/NGpage.S | 2 ++ + 4 files changed, 6 insertions(+) + +--- a/arch/sparc64/kernel/tsb.S ++++ b/arch/sparc64/kernel/tsb.S +@@ -546,6 +546,7 @@ NGtsb_init: + subcc %o1, 0x100, %o1 + bne,pt %xcc, 1b + add %o0, 0x100, %o0 ++ membar #Sync + retl + wr %g2, 0x0, %asi + .size NGtsb_init, .-NGtsb_init +--- a/arch/sparc64/lib/NGbzero.S ++++ b/arch/sparc64/lib/NGbzero.S +@@ -88,6 +88,7 @@ NGbzero_loop: + bne,pt %xcc, NGbzero_loop + add %o0, 64, %o0 + ++ membar #Sync + wr %o4, 0x0, %asi + brz,pn %o1, NGbzero_done + NGbzero_medium: +--- a/arch/sparc64/lib/NGmemcpy.S ++++ b/arch/sparc64/lib/NGmemcpy.S +@@ -247,6 +247,8 @@ FUNC_NAME: /* %o0=dst, %o1=src, %o2=len + /* fall through */ + + 60: ++ membar #Sync ++ + /* %o2 contains any final bytes still needed to be copied + * over. If anything is left, we copy it one byte at a time. + */ +--- a/arch/sparc64/lib/NGpage.S ++++ b/arch/sparc64/lib/NGpage.S +@@ -41,6 +41,7 @@ NGcopy_user_page: /* %o0=dest, %o1=src, + subcc %g7, 64, %g7 + bne,pt %xcc, 1b + add %o0, 32, %o0 ++ membar #Sync + retl + nop + +@@ -63,6 +64,7 @@ NGclear_user_page: /* %o0=dest, %o1=vadd + subcc %g7, 64, %g7 + bne,pt %xcc, 1b + add %o0, 32, %o0 ++ membar #Sync + retl + nop + diff --git a/review-2.6.20/series b/review-2.6.20/series index fb97f5d7f04..1f7797c5642 100644 --- a/review-2.6.20/series +++ b/review-2.6.20/series @@ -30,3 +30,4 @@ fix-deadlock-in-audit_log_task_context.patch uml-arch_prctl-should-set-thread-fs.patch input-i8042-another-attempt-to-fix-aux-delivery-checks.patch st-fix-tape-dies-if-wrong-block-size-used-bug-7919.patch +fix-niagara-memory-corruption.patch