Author: dannf Date: Sat Jan 19 00:36:33 2008 New Revision: 10143 Log: * [ia64] Fix an issue with unaligned accesses and certain floating point instructions that can result in silent user data corruption (closes: #461493).
Added: dists/etch/linux-2.6/debian/patches/bugfix/ia64-fix-unaligned-fp-corruption.patch Modified: dists/etch/linux-2.6/debian/changelog dists/etch/linux-2.6/debian/patches/series/18 Modified: dists/etch/linux-2.6/debian/changelog ============================================================================== --- dists/etch/linux-2.6/debian/changelog (original) +++ dists/etch/linux-2.6/debian/changelog Sat Jan 19 00:36:33 2008 @@ -4,7 +4,12 @@ * [mips] Fix network on Cobalt RaQ1, thanks Thomas Bogendoerfer (closes: #460337). - -- Martin Michlmayr <[EMAIL PROTECTED]> Sat, 12 Jan 2008 08:50:10 +0100 + [ dann frazier ] + * [ia64] Fix an issue with unaligned accesses and certain floating point + instructions that can result in silent user data corruption + (closes: #461493). + + -- dann frazier <[EMAIL PROTECTED]> Fri, 18 Jan 2008 17:19:59 -0700 linux-2.6 (2.6.18.dfsg.1-17) stable; urgency=high Added: dists/etch/linux-2.6/debian/patches/bugfix/ia64-fix-unaligned-fp-corruption.patch ============================================================================== --- (empty file) +++ dists/etch/linux-2.6/debian/patches/bugfix/ia64-fix-unaligned-fp-corruption.patch Sat Jan 19 00:36:33 2008 @@ -0,0 +1,57 @@ +From: Luck, Tony <[EMAIL PROTECTED]> +Date: Mon, 14 Jan 2008 17:59:24 +0000 (-0800) +Subject: [IA64] Fix unaligned handler for floating point instructions with base update +X-Git-Tag: v2.6.24-rc8~1 +X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=1a499150e4ec1299232e24389f648d059ce5617a + +[IA64] Fix unaligned handler for floating point instructions with base update + +The compiler team did the hard work for this distilling a problem in +large fortran application which showed up when applied to a 290MB input +data set down to this instruction: + + ldfd f34=[r17],-8 + +Which they noticed incremented r17 by 0x10 rather than decrementing it +by 8 when the value in r17 caused an unaligned data fault. I tracked +it down to some bad instruction decoding in unaligned.c. The code +assumes that the 'x' bit can determine whether the instruction is +an "ldf" or "ldfp" ... which it is for opcode=6 (see table 4-29 on +page 3:302 of the SDM). But for opcode=7 the 'x' bit is irrelevent, +all variants are "ldf" instructions (see table 4-36 on page 3:306). + +Note also that interpreting the instruction as "ldfp" means that the +"paired" floating point register (f35 in the example here) will also +be corrupted. + +Signed-off-by: Tony Luck <[EMAIL PROTECTED]> +--- + +diff --git a/arch/ia64/kernel/unaligned.c b/arch/ia64/kernel/unaligned.c +index 2173de9..f6a1aeb 100644 +--- a/arch/ia64/kernel/unaligned.c ++++ b/arch/ia64/kernel/unaligned.c +@@ -1488,16 +1488,19 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs) + case LDFA_OP: + case LDFCCLR_OP: + case LDFCNC_OP: +- case LDF_IMM_OP: +- case LDFA_IMM_OP: +- case LDFCCLR_IMM_OP: +- case LDFCNC_IMM_OP: + if (u.insn.x) + ret = emulate_load_floatpair(ifa, u.insn, regs); + else + ret = emulate_load_float(ifa, u.insn, regs); + break; + ++ case LDF_IMM_OP: ++ case LDFA_IMM_OP: ++ case LDFCCLR_IMM_OP: ++ case LDFCNC_IMM_OP: ++ ret = emulate_load_float(ifa, u.insn, regs); ++ break; ++ + case STF_OP: + case STF_IMM_OP: + ret = emulate_store_float(ifa, u.insn, regs); Modified: dists/etch/linux-2.6/debian/patches/series/18 ============================================================================== --- dists/etch/linux-2.6/debian/patches/series/18 (original) +++ dists/etch/linux-2.6/debian/patches/series/18 Sat Jan 19 00:36:33 2008 @@ -1 +1,2 @@ + bugfix/mips/cobalt-raq1-net.patch ++ bugfix/ia64-fix-unaligned-fp-corruption.patch _______________________________________________ Kernel-svn-changes mailing list Kernel-svn-changes@lists.alioth.debian.org http://lists.alioth.debian.org/mailman/listinfo/kernel-svn-changes