ctx_len, DMA_FROM_DEVICE);
        if (dma_mapping_error(jrdev, state->ctx_dma)) {
                dev_err(jrdev, "unable to map ctx\n");
+               state->ctx_dma = 0;
                return -ENOMEM;
        }
 
        state->ctx_dma = dma_map_single(jrdev, state->caam_ctx, ctx_len, flag);
        if (dma_mapping_error(jrdev, state->ctx_dma)) {
                dev_err(jrdev, "unable to map ctx\n");
+               state->ctx_dma = 0;
                return -ENOMEM;
        }
 
        struct caam_hash_ctx *ctx = crypto_ahash_ctx(ahash);
        struct caam_hash_state *state = ahash_request_ctx(req);
 
-       if (state->ctx_dma)
+       if (state->ctx_dma) {
                dma_unmap_single(dev, state->ctx_dma, ctx->ctx_len, flag);
+               state->ctx_dma = 0;
+       }
        ahash_unmap(dev, edesc, req, dst_len);
 }
 
        state->finup = ahash_finup_first;
        state->final = ahash_final_no_ctx;
 
+       state->ctx_dma = 0;
        state->current_buf = 0;
        state->buf_dma = 0;
        state->buflen_0 = 0;