• Ollie Wild's avatar
    sh: Fix TCP payload csum bug in csum_partial_copy_generic(). · 24ab54cb
    Ollie Wild authored
    There's a bug in the Hitachi SuperH csum_partial_copy_generic()
    implementation.  If the supplied length is 1 (and several alignment
    conditions are met), the function immediately branches to label 4.
    However, the assembly at label 4 expects the length to be stored in
    register r2.  Since this has not occurred, subsequent behavior is
    undefined.
    
    This can cause bad payload checksums in TCP connections.
    
    I've fixed the problem by initializing register r2 prior to the branch
    instruction.
    Signed-off-by: default avatarOllie Wild <aaw@rincewind.tv>
    Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
    24ab54cb
checksum.S 6.82 KB