summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhen Kong <zkong@codeaurora.org>2018-02-01 14:52:10 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2020-04-21 00:19:28 -0700
commitd9add1d73d8fdbed8ee29108e24cd710b5d8cbe0 (patch)
treeec7322f71c70bfd32b8bc8a7f9a889564eb9260d
parent85671676372a4f586c328f994cb9f3577f411df5 (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.c80
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;
}