Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b269cc27 authored by Zhen Kong's avatar Zhen Kong
Browse files

crypto: msm: update QTI crypto drivers for msm-4.14



Fix compilation issues for QTI crypto driver on msm-4.14,
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: default avatarZhen Kong <zkong@codeaurora.org>
parent fc2d56f6
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -245,9 +245,11 @@ static void req_done(unsigned long data)
			pqce->active_command = new_req;
			spin_unlock_irqrestore(&podev->lock, flags);

			if (new_req) {
				new_req->err = 0;
				/* start a new request */
				ret = start_req(pqce, new_req);
			}
			if (unlikely(new_req && ret)) {
				new_req->err = ret;
				complete(&new_req->complete);
+0 −7
Original line number Diff line number Diff line
@@ -5976,13 +5976,6 @@ static int qce_smmu_init(struct qce_device *pce_dev)
		goto ext_fail_set_attr;
	}

	ret = iommu_domain_set_attr(mapping->domain,
				DOMAIN_ATTR_UPSTREAM_IOVA_ALLOCATOR, &attr);
	if (ret < 0) {
		pr_err("Set UPSTREAM_IOVA_ALLOCATOR failed, err = %d\n", ret);
		goto ext_fail_set_attr;
	}

	ret = arm_iommu_attach_device(pce_dev->pdev, mapping);
	if (ret < 0) {
		pr_err("Attach device failed, err = %d\n", ret);
+41 −37
Original line number Diff line number Diff line
@@ -1657,12 +1657,16 @@ static inline long qcedev_ioctl(struct file *file,
	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);
@@ -1673,27 +1677,27 @@ static inline long qcedev_ioctl(struct file *file,
	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;
@@ -1702,23 +1706,23 @@ static inline long qcedev_ioctl(struct file *file,
		{
		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;
		}
@@ -1731,19 +1735,19 @@ static inline long qcedev_ioctl(struct file *file,
		{
		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;
@@ -1754,7 +1758,7 @@ static inline long qcedev_ioctl(struct file *file,
				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;
@@ -1767,11 +1771,11 @@ static inline long qcedev_ioctl(struct file *file,
			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;
		}
@@ -1783,17 +1787,17 @@ static inline long qcedev_ioctl(struct file *file,
			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;
@@ -1804,12 +1808,12 @@ static inline long qcedev_ioctl(struct file *file,
			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;
@@ -1819,23 +1823,23 @@ static inline long qcedev_ioctl(struct file *file,
		{
		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;
@@ -1846,12 +1850,12 @@ static inline long qcedev_ioctl(struct file *file,
			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;
		}