crypto: ccp - Apply appropriate gfp_t type to memory allocations
authorTom Lendacky <thomas.lendacky@amd.com>
Mon, 6 Jan 2014 19:33:59 +0000 (13:33 -0600)
committerHerbert Xu <herbert@gondor.apana.org.au>
Wed, 15 Jan 2014 03:33:35 +0000 (11:33 +0800)
Fix some memory allocations to use the appropriate gfp_t type based
on the CRYPTO_TFM_REQ_MAY_SLEEP flag.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/ccp/ccp-crypto-aes-cmac.c
drivers/crypto/ccp/ccp-crypto-sha.c

index 64dd35e..398832c 100644 (file)
@@ -61,6 +61,7 @@ static int ccp_do_cmac_update(struct ahash_request *req, unsigned int nbytes,
        unsigned int block_size =
                crypto_tfm_alg_blocksize(crypto_ahash_tfm(tfm));
        unsigned int len, need_pad, sg_count;
+       gfp_t gfp;
        int ret;
 
        if (!ctx->u.aes.key_len)
@@ -99,7 +100,9 @@ static int ccp_do_cmac_update(struct ahash_request *req, unsigned int nbytes,
         * possible data pieces (buffer, input data, padding)
         */
        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)
                return ret;
 
index b0881df..0571940 100644 (file)
@@ -128,6 +128,7 @@ static int ccp_do_sha_update(struct ahash_request *req, unsigned int nbytes,
        unsigned int block_size =
                crypto_tfm_alg_blocksize(crypto_ahash_tfm(tfm));
        unsigned int len, sg_count;
+       gfp_t gfp;
        int ret;
 
        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)
         */
        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)
                return ret;