diff options
| author | Parai Wang <fpwang@codeaurora.org> | 2018-03-12 14:36:02 +0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-03-27 01:10:29 -0700 |
| commit | 7fcca62cb3fb94d2d2870f7f7cbd2084e0820a3b (patch) | |
| tree | 2065f9508d6cd9d21f89046314c7913aec70031f | |
| parent | 4bafa4fba51a14293bdecfa4e089e6b5a691805f (diff) | |
crypto: msm: reset pointer before returning from the function
Reset cipher_req.creq.dst and cipher_req.creq.src pointer to NULL
before returning from the function, and initialize scatterlist
variable before using it.
Change-Id: I5d5eee06a5213a05b20bf459ef0bf0c433fadbdd
Signed-off-by: Zhen Kong <zkong@codeaurora.org>
Signed-off-by: Parai Wang <fpwang@codeaurora.org>
| -rw-r--r-- | drivers/crypto/msm/qcedev.c | 22 | ||||
| -rw-r--r-- | drivers/crypto/msm/qcrypto.c | 4 |
2 files changed, 17 insertions, 9 deletions
diff --git a/drivers/crypto/msm/qcedev.c b/drivers/crypto/msm/qcedev.c index a55f236961b8..953159c66159 100644 --- a/drivers/crypto/msm/qcedev.c +++ b/drivers/crypto/msm/qcedev.c @@ -1,6 +1,6 @@ /* Qualcomm CE device driver. * - * Copyright (c) 2010-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2010-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -843,6 +843,7 @@ static int qcedev_sha_final(struct qcedev_async_req *qcedev_areq, memset(&handle->sha_ctxt.trailing_buf[0], 0, 64); kzfree(k_buf_src); + qcedev_areq->sha_req.sreq.src = NULL; return err; } @@ -1012,6 +1013,7 @@ static int qcedev_hmac_get_ohash(struct qcedev_async_req *qcedev_areq, handle->sha_ctxt.first_blk = 0; kzfree(k_src); + qcedev_areq->sha_req.sreq.src = NULL; return err; } @@ -1166,8 +1168,10 @@ static int qcedev_vbuf_ablk_cipher_max_xfer(struct qcedev_async_req *areq, if (err == 0 && copy_to_user( (void __user *)creq->vbuf.dst[dst_i].vaddr, (k_align_dst + byteoffset), - creq->vbuf.dst[dst_i].len)) - return -EFAULT; + creq->vbuf.dst[dst_i].len)) { + err = -EFAULT; + goto exit; + } k_align_dst += creq->vbuf.dst[dst_i].len + byteoffset; @@ -1176,9 +1180,11 @@ static int qcedev_vbuf_ablk_cipher_max_xfer(struct qcedev_async_req *areq, } else { if (err == 0 && copy_to_user( (void __user *)creq->vbuf.dst[dst_i].vaddr, - (k_align_dst + byteoffset), - creq->data_len)) - return -EFAULT; + (k_align_dst + byteoffset), + creq->data_len)) { + err = -EFAULT; + goto exit; + } k_align_dst += creq->data_len; creq->vbuf.dst[dst_i].len -= creq->data_len; @@ -1187,7 +1193,9 @@ static int qcedev_vbuf_ablk_cipher_max_xfer(struct qcedev_async_req *areq, } } *di = dst_i; - +exit: + areq->cipher_req.creq.src = NULL; + areq->cipher_req.creq.dst = NULL; return err; }; diff --git a/drivers/crypto/msm/qcrypto.c b/drivers/crypto/msm/qcrypto.c index f38fc422b35e..2bfd0525c529 100644 --- a/drivers/crypto/msm/qcrypto.c +++ b/drivers/crypto/msm/qcrypto.c @@ -1,6 +1,6 @@ /* Qualcomm Crypto driver * - * Copyright (c) 2010-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2010-2018, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -3923,7 +3923,7 @@ static int _sha_hmac_setkey(struct crypto_ahash *tfm, const u8 *key, struct qcrypto_sha_ctx *sha_ctx = crypto_tfm_ctx(&tfm->base); uint8_t *in_buf; int ret = 0; - struct scatterlist sg; + struct scatterlist sg = {0}; struct ahash_request *ahash_req; struct completion ahash_req_complete; |
