|
@@ -880,7 +880,7 @@ static int ipsec_esp(struct ipsec_esp_edesc *edesc, struct aead_request *areq,
|
|
unsigned int cryptlen = areq->cryptlen;
|
|
unsigned int cryptlen = areq->cryptlen;
|
|
unsigned int authsize = ctx->authsize;
|
|
unsigned int authsize = ctx->authsize;
|
|
unsigned int ivsize;
|
|
unsigned int ivsize;
|
|
- int sg_count;
|
|
|
|
|
|
+ int sg_count, ret;
|
|
|
|
|
|
/* hmac key */
|
|
/* hmac key */
|
|
map_single_talitos_ptr(dev, &desc->ptr[0], ctx->authkeylen, &ctx->key,
|
|
map_single_talitos_ptr(dev, &desc->ptr[0], ctx->authkeylen, &ctx->key,
|
|
@@ -984,7 +984,12 @@ static int ipsec_esp(struct ipsec_esp_edesc *edesc, struct aead_request *areq,
|
|
map_single_talitos_ptr(dev, &desc->ptr[6], ivsize, ctx->iv, 0,
|
|
map_single_talitos_ptr(dev, &desc->ptr[6], ivsize, ctx->iv, 0,
|
|
DMA_FROM_DEVICE);
|
|
DMA_FROM_DEVICE);
|
|
|
|
|
|
- return talitos_submit(dev, desc, callback, areq);
|
|
|
|
|
|
+ ret = talitos_submit(dev, desc, callback, areq);
|
|
|
|
+ if (ret != -EINPROGRESS) {
|
|
|
|
+ ipsec_esp_unmap(dev, edesc, areq);
|
|
|
|
+ kfree(edesc);
|
|
|
|
+ }
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|