|
@@ -128,6 +128,7 @@ static int ccp_do_sha_update(struct ahash_request *req, unsigned int nbytes,
|
|
unsigned int block_size =
|
|
unsigned int block_size =
|
|
crypto_tfm_alg_blocksize(crypto_ahash_tfm(tfm));
|
|
crypto_tfm_alg_blocksize(crypto_ahash_tfm(tfm));
|
|
unsigned int len, sg_count;
|
|
unsigned int len, sg_count;
|
|
|
|
+ gfp_t gfp;
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
if (!final && ((nbytes + rctx->buf_count) <= block_size)) {
|
|
if (!final && ((nbytes + rctx->buf_count) <= block_size)) {
|
|
@@ -156,7 +157,9 @@ static int ccp_do_sha_update(struct ahash_request *req, unsigned int nbytes,
|
|
* possible data pieces (hmac ipad, buffer, input data)
|
|
* possible data pieces (hmac ipad, buffer, input data)
|
|
*/
|
|
*/
|
|
sg_count = (nbytes) ? sg_nents(req->src) + 2 : 2;
|
|
sg_count = (nbytes) ? sg_nents(req->src) + 2 : 2;
|
|
- ret = sg_alloc_table(&rctx->data_sg, sg_count, GFP_KERNEL);
|
|
|
|
|
|
+ gfp = req->base.flags & CRYPTO_TFM_REQ_MAY_SLEEP ?
|
|
|
|
+ GFP_KERNEL : GFP_ATOMIC;
|
|
|
|
+ ret = sg_alloc_table(&rctx->data_sg, sg_count, gfp);
|
|
if (ret)
|
|
if (ret)
|
|
return ret;
|
|
return ret;
|
|
|
|
|