• Horia Geantă's avatar
    crypto: caam - fix IV DMA mapping and updating · 115957bb
    Horia Geantă authored
    There are two IV-related issues:
    (1) crypto API does not guarantee to provide an IV buffer that is DMAable,
    thus it's incorrect to DMA map it
    (2) for in-place decryption, since ciphertext is overwritten with
    plaintext, updated req->info will contain the last block of plaintext
    (instead of the last block of ciphertext)
    
    While these two issues could be fixed separately, it's straightforward
    to fix both in the same time - by allocating extra space in the
    ablkcipher_edesc for the IV that will be fed to the crypto engine;
    this allows for fixing (2) by saving req->src[last_block] in req->info
    directly, i.e. without allocating another temporary buffer.
    
    A side effect of the fix is that it's no longer possible to have the IV
    and req->src contiguous. Code checking for this case is removed.
    
    Cc: <stable@vger.kernel.org> # 4.13+
    Fixes: 854b06f7 ("crypto: caam - properly set IV after {en,de}crypt")
    Link: http://lkml.kernel.org/r/20170113084620.GF22022@gondor.apana.org.auReported-by: default avatarGilad Ben-Yossef <gilad@benyossef.com>
    Signed-off-by: default avatarHoria Geantă <horia.geanta@nxp.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    115957bb
caamalg.c 93.9 KB