• Giovanni Cabiddu's avatar
    crypto: qat - remove dma_free_coherent() for RSA · 3dfaf007
    Giovanni Cabiddu authored
    After commit f5ff79fd ("dma-mapping: remove CONFIG_DMA_REMAP"), if
    the algorithms are enabled, the driver crashes with a BUG_ON while
    executing vunmap() in the context of a tasklet. This is due to the fact
    that the function dma_free_coherent() cannot be called in an interrupt
    context (see Documentation/core-api/dma-api-howto.rst).
    
    The functions qat_rsa_enc() and qat_rsa_dec() allocate memory with
    dma_alloc_coherent() if the source or the destination buffers are made
    of multiple flat buffers or of a size that is not compatible with the
    hardware.
    This memory is then freed with dma_free_coherent() in the context of a
    tasklet invoked to handle the response for the corresponding request.
    
    Replace allocations with dma_alloc_coherent() in the functions
    qat_rsa_enc() and qat_rsa_dec() with kmalloc() + dma_map_single().
    
    Cc: stable@vger.kernel.org
    Fixes: a9905320 ("crypto: qat - Add support for RSA algorithm")
    Signed-off-by: default avatarGiovanni Cabiddu <giovanni.cabiddu@intel.com>
    Reviewed-by: default avatarAdam Guerin <adam.guerin@intel.com>
    Reviewed-by: default avatarWojciech Ziemba <wojciech.ziemba@intel.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    3dfaf007
qat_asym_algs.c 31.9 KB