diff options
| author | Zhen Kong <zkong@codeaurora.org> | 2018-02-01 14:52:10 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2020-04-21 00:19:28 -0700 |
| commit | d9add1d73d8fdbed8ee29108e24cd710b5d8cbe0 (patch) | |
| tree | ec7322f71c70bfd32b8bc8a7f9a889564eb9260d | |
| parent | 85671676372a4f586c328f994cb9f3577f411df5 (diff) | |
crypto: msm: update QTI crypto drivers for msm-4.4
Fix compilation issues for QTI crypto driver on msm-4.4 ,
this change does code clean up to remove unsupported SMMU
attribute, allocate qcedev_async_req from heap instead of
stack, and add NULL pointer check for ota_async_req.
Change-Id: I5cabcb6993d8855275f3b38c7de6eafb77f8cbf4
Signed-off-by: Zhen Kong <zkong@codeaurora.org>
Signed-off-by: Naitik Bharadiya <bharad@codeaurora.org>
Signed-off-by: Swetha Chikkaboraiah <schikk@codeaurora.org>
| -rw-r--r-- | drivers/crypto/msm/qcedev.c | 80 |
1 files changed, 42 insertions, 38 deletions
diff --git a/drivers/crypto/msm/qcedev.c b/drivers/crypto/msm/qcedev.c index 425fd6b4b9f5..bbbb15fdd4f8 100644 --- a/drivers/crypto/msm/qcedev.c +++ b/drivers/crypto/msm/qcedev.c @@ -1,6 +1,6 @@ /* Qualcomm CE device driver. * - * Copyright (c) 2010-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2010-2018, 2020, 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 @@ -1605,12 +1605,16 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) int err = 0; struct qcedev_handle *handle; struct qcedev_control *podev; - struct qcedev_async_req qcedev_areq; + struct qcedev_async_req *qcedev_areq; struct qcedev_stat *pstat; + qcedev_areq = kzalloc(sizeof(struct qcedev_async_req), GFP_KERNEL); + if (!qcedev_areq) + return -ENOMEM; + handle = file->private_data; podev = handle->cntl; - qcedev_areq.handle = handle; + qcedev_areq->handle = handle; if (podev == NULL || podev->magic != QCEDEV_MAGIC) { pr_err("%s: invalid handle %pK\n", __func__, podev); @@ -1621,27 +1625,27 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) if (_IOC_TYPE(cmd) != QCEDEV_IOC_MAGIC) return -ENOTTY; - init_completion(&qcedev_areq.complete); + init_completion(&qcedev_areq->complete); pstat = &_qcedev_stat; switch (cmd) { case QCEDEV_IOCTL_ENC_REQ: case QCEDEV_IOCTL_DEC_REQ: - if (copy_from_user(&qcedev_areq.cipher_op_req, + if (copy_from_user(&qcedev_areq->cipher_op_req, (void __user *)arg, sizeof(struct qcedev_cipher_op_req))) return -EFAULT; - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_CIPHER; + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_CIPHER; - if (qcedev_check_cipher_params(&qcedev_areq.cipher_op_req, + if (qcedev_check_cipher_params(&qcedev_areq->cipher_op_req, podev)) return -EINVAL; - err = qcedev_vbuf_ablk_cipher(&qcedev_areq, handle); + err = qcedev_vbuf_ablk_cipher(qcedev_areq, handle); if (err) return err; if (copy_to_user((void __user *)arg, - &qcedev_areq.cipher_op_req, + &qcedev_areq->cipher_op_req, sizeof(struct qcedev_cipher_op_req))) return -EFAULT; break; @@ -1650,23 +1654,23 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) { struct scatterlist sg_src; - if (copy_from_user(&qcedev_areq.sha_op_req, + if (copy_from_user(&qcedev_areq->sha_op_req, (void __user *)arg, sizeof(struct qcedev_sha_op_req))) return -EFAULT; mutex_lock(&hash_access_lock); - if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) { + if (qcedev_check_sha_params(&qcedev_areq->sha_op_req, podev)) { mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA; - err = qcedev_hash_init(&qcedev_areq, handle, &sg_src); + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_SHA; + err = qcedev_hash_init(qcedev_areq, handle, &sg_src); if (err) { mutex_unlock(&hash_access_lock); return err; } mutex_unlock(&hash_access_lock); - if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req, + if (copy_to_user((void __user *)arg, &qcedev_areq->sha_op_req, sizeof(struct qcedev_sha_op_req))) return -EFAULT; } @@ -1679,19 +1683,19 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) { struct scatterlist sg_src; - if (copy_from_user(&qcedev_areq.sha_op_req, + if (copy_from_user(&qcedev_areq->sha_op_req, (void __user *)arg, sizeof(struct qcedev_sha_op_req))) return -EFAULT; mutex_lock(&hash_access_lock); - if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) { + if (qcedev_check_sha_params(&qcedev_areq->sha_op_req, podev)) { mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA; + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_SHA; - if (qcedev_areq.sha_op_req.alg == QCEDEV_ALG_AES_CMAC) { - err = qcedev_hash_cmac(&qcedev_areq, handle, &sg_src); + if (qcedev_areq->sha_op_req.alg == QCEDEV_ALG_AES_CMAC) { + err = qcedev_hash_cmac(qcedev_areq, handle, &sg_src); if (err) { mutex_unlock(&hash_access_lock); return err; @@ -1702,7 +1706,7 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) mutex_unlock(&hash_access_lock); return -EINVAL; } - err = qcedev_hash_update(&qcedev_areq, handle, &sg_src); + err = qcedev_hash_update(qcedev_areq, handle, &sg_src); if (err) { mutex_unlock(&hash_access_lock); return err; @@ -1715,11 +1719,11 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) mutex_unlock(&hash_access_lock); return -EINVAL; } - memcpy(&qcedev_areq.sha_op_req.digest[0], + memcpy(&qcedev_areq->sha_op_req.digest[0], &handle->sha_ctxt.digest[0], handle->sha_ctxt.diglen); mutex_unlock(&hash_access_lock); - if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req, + if (copy_to_user((void __user *)arg, &qcedev_areq->sha_op_req, sizeof(struct qcedev_sha_op_req))) return -EFAULT; } @@ -1731,17 +1735,17 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) pr_err("%s Init was not called\n", __func__); return -EINVAL; } - if (copy_from_user(&qcedev_areq.sha_op_req, + if (copy_from_user(&qcedev_areq->sha_op_req, (void __user *)arg, sizeof(struct qcedev_sha_op_req))) return -EFAULT; mutex_lock(&hash_access_lock); - if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) { + if (qcedev_check_sha_params(&qcedev_areq->sha_op_req, podev)) { mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA; - err = qcedev_hash_final(&qcedev_areq, handle); + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_SHA; + err = qcedev_hash_final(qcedev_areq, handle); if (err) { mutex_unlock(&hash_access_lock); return err; @@ -1752,12 +1756,12 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.sha_op_req.diglen = handle->sha_ctxt.diglen; - memcpy(&qcedev_areq.sha_op_req.digest[0], + qcedev_areq->sha_op_req.diglen = handle->sha_ctxt.diglen; + memcpy(&qcedev_areq->sha_op_req.digest[0], &handle->sha_ctxt.digest[0], handle->sha_ctxt.diglen); mutex_unlock(&hash_access_lock); - if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req, + if (copy_to_user((void __user *)arg, &qcedev_areq->sha_op_req, sizeof(struct qcedev_sha_op_req))) return -EFAULT; handle->sha_ctxt.init_done = false; @@ -1767,23 +1771,23 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) { struct scatterlist sg_src; - if (copy_from_user(&qcedev_areq.sha_op_req, + if (copy_from_user(&qcedev_areq->sha_op_req, (void __user *)arg, sizeof(struct qcedev_sha_op_req))) return -EFAULT; mutex_lock(&hash_access_lock); - if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) { + if (qcedev_check_sha_params(&qcedev_areq->sha_op_req, podev)) { mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA; - qcedev_hash_init(&qcedev_areq, handle, &sg_src); - err = qcedev_hash_update(&qcedev_areq, handle, &sg_src); + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_SHA; + qcedev_hash_init(qcedev_areq, handle, &sg_src); + err = qcedev_hash_update(qcedev_areq, handle, &sg_src); if (err) { mutex_unlock(&hash_access_lock); return err; } - err = qcedev_hash_final(&qcedev_areq, handle); + err = qcedev_hash_final(qcedev_areq, handle); if (err) { mutex_unlock(&hash_access_lock); return err; @@ -1794,12 +1798,12 @@ long qcedev_ioctl(struct file *file, unsigned cmd, unsigned long arg) mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.sha_op_req.diglen = handle->sha_ctxt.diglen; - memcpy(&qcedev_areq.sha_op_req.digest[0], + qcedev_areq->sha_op_req.diglen = handle->sha_ctxt.diglen; + memcpy(&qcedev_areq->sha_op_req.digest[0], &handle->sha_ctxt.digest[0], handle->sha_ctxt.diglen); mutex_unlock(&hash_access_lock); - if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req, + if (copy_to_user((void __user *)arg, &qcedev_areq->sha_op_req, sizeof(struct qcedev_sha_op_req))) return -EFAULT; } |
