• Josh Poimboeuf's avatar
    crypto: sha1-mb - make sha1_x8_avx2() conform to C function ABI · 4a6b27b7
    Josh Poimboeuf authored
    Megha Dey reported a kernel panic in crypto code.  The problem is that
    sha1_x8_avx2() clobbers registers r12-r15 without saving and restoring
    them.
    
    Before commit aec4d0e3 ("x86/asm/crypto: Simplify stack usage in
    sha-mb functions"), those registers were saved and restored by the
    callers of the function.  I removed them with that commit because I
    didn't realize sha1_x8_avx2() clobbered them.
    
    Fix the potential undefined behavior associated with clobbering the
    registers and make the behavior less surprising by changing the
    registers to be callee saved/restored to conform with the C function
    call ABI.
    
    Also, rdx (aka RSP_SAVE) doesn't need to be saved: I verified that none
    of the callers rely on it being saved, and it's not a callee-saved
    register in the C ABI.
    
    Fixes: aec4d0e3 ("x86/asm/crypto: Simplify stack usage in sha-mb functions")
    Cc: stable@vger.kernel.org # 4.6
    Reported-by: default avatarMegha Dey <megha.dey@linux.intel.com>
    Signed-off-by: default avatarJosh Poimboeuf <jpoimboe@redhat.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    4a6b27b7
sha1_x8_avx2.S 12.5 KB