diff options
Diffstat (limited to 'crypto/shash.c')
| -rw-r--r-- | crypto/shash.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/crypto/shash.c b/crypto/shash.c index 5e31c8d776df..325a14da5827 100644 --- a/crypto/shash.c +++ b/crypto/shash.c @@ -41,7 +41,7 @@ static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key,  	int err;  	absize = keylen + (alignmask & ~(crypto_tfm_ctx_alignment() - 1)); -	buffer = kmalloc(absize, GFP_KERNEL); +	buffer = kmalloc(absize, GFP_ATOMIC);  	if (!buffer)  		return -ENOMEM; @@ -275,12 +275,14 @@ static int shash_async_finup(struct ahash_request *req)  int shash_ahash_digest(struct ahash_request *req, struct shash_desc *desc)  { -	struct scatterlist *sg = req->src; -	unsigned int offset = sg->offset;  	unsigned int nbytes = req->nbytes; +	struct scatterlist *sg; +	unsigned int offset;  	int err; -	if (nbytes < min(sg->length, ((unsigned int)(PAGE_SIZE)) - offset)) { +	if (nbytes && +	    (sg = req->src, offset = sg->offset, +	     nbytes < min(sg->length, ((unsigned int)(PAGE_SIZE)) - offset))) {  		void *data;  		data = kmap_atomic(sg_page(sg)); | 
