On Tue, 2016-08-02 at 10:07 +0200, Christophe Leroy wrote: > commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() > based on copy_tofrom_user()") introduced a bug when destination > address is odd and initial csum is not null > > In that (rare) case the initial csum value has to be rotated one byte > as well as the resulting value is > > This patch also fixes related comments > > Fixes: 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() > based on copy_tofrom_user()") > Cc: stable@xxxxxxxxxxxxxxx > > Signed-off-by: Christophe Leroy <christophe.leroy@xxxxxx> > --- > v2: updated comments as suggested by Segher > > arch/powerpc/lib/checksum_32.S | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) Alessio, can you confirm whether this fixes the problem you reported? -Scott > > diff --git a/arch/powerpc/lib/checksum_32.S b/arch/powerpc/lib/checksum_32.S > index d90870a..0a57fe6 100644 > --- a/arch/powerpc/lib/checksum_32.S > +++ b/arch/powerpc/lib/checksum_32.S > @@ -127,8 +127,9 @@ _GLOBAL(csum_partial_copy_generic) > stw r7,12(r1) > stw r8,8(r1) > > - andi. r0,r4,1 /* is destination > address even ? */ > - cmplwi cr7,r0,0 > + rlwinm r0,r4,3,0x8 > + rlwnm r6,r6,r0,0,31 /* odd destination address: > rotate one byte */ > + cmplwi cr7,r0,0 /* is destination address even ? */ > addic r12,r6,0 > addi r6,r4,-4 > neg r0,r4 > @@ -237,7 +238,7 @@ _GLOBAL(csum_partial_copy_generic) > 66: addze r3,r12 > addi r1,r1,16 > beqlr+ cr7 > - rlwinm r3,r3,8,0,31 /* swap bytes for odd destination > */ > + rlwinm r3,r3,8,0,31 /* odd destination address: > rotate one byte */ > blr > > /* read fault */ -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html