lkml.org 
[lkml]   [2016]   [Aug]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v2] powerpc/32: fix csum_partial_copy_generic()
    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@vger.kernel.org
    >
    > Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
    > ---
    >  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 */

    \
     
     \ /
      Last update: 2016-08-04 06:42    [W:3.671 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site