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

Commit 8ad3424d authored by Zhen Kong's avatar Zhen Kong
Browse files

crypto: qcedev: change to use sg_init_one



Make change to init sg in qcedev functions which was
not initialized and was resulting in crashes with kernel
sg debug flag enabled; also fixed the sg buf vaddr issue
when sha request data is NULL.

Change-Id: I689f3a395ed0e07bc5aa0e83d043fb8251d0c203
Signed-off-by: default avatarZhen Kong <zkong@codeaurora.org>
parent 4c5faa02
Loading
Loading
Loading
Loading
+15 −20
Original line number Diff line number Diff line
@@ -724,9 +724,8 @@ static int qcedev_sha_update_max_xfer(struct qcedev_async_req *qcedev_areq,
	trailing_buf_len =  CE_SHA_BLOCK_SIZE - sha_pad_len;

	qcedev_areq->sha_req.sreq.src = sg_src;
	sg_set_buf(qcedev_areq->sha_req.sreq.src, k_align_src,
	sg_init_one(qcedev_areq->sha_req.sreq.src, k_align_src,
						total-trailing_buf_len);
	sg_mark_end(qcedev_areq->sha_req.sreq.src);

	qcedev_areq->sha_req.sreq.nbytes = total - trailing_buf_len;

@@ -876,7 +875,6 @@ static int qcedev_sha_final(struct qcedev_async_req *qcedev_areq,

	total = handle->sha_ctxt.trailing_buf_len;

	if (total) {
	k_buf_src = kmalloc(total + CACHE_LINE_SIZE * 2,
				GFP_KERNEL);
	if (k_buf_src == NULL)
@@ -885,10 +883,10 @@ static int qcedev_sha_final(struct qcedev_async_req *qcedev_areq,
	k_align_src = (uint8_t *)ALIGN(((uintptr_t)k_buf_src),
						CACHE_LINE_SIZE);
	memcpy(k_align_src, &handle->sha_ctxt.trailing_buf[0], total);
	}

	qcedev_areq->sha_req.sreq.src = (struct scatterlist *) &sg_src;
	sg_set_buf(qcedev_areq->sha_req.sreq.src, k_align_src, total);
	sg_mark_end(qcedev_areq->sha_req.sreq.src);

	sg_init_one(qcedev_areq->sha_req.sreq.src, k_align_src, total);

	qcedev_areq->sha_req.sreq.nbytes = total;

@@ -927,7 +925,7 @@ static int qcedev_hash_cmac(struct qcedev_async_req *qcedev_areq,
		return -EFAULT;


	k_buf_src = kmalloc(total, GFP_KERNEL);
	k_buf_src = kmalloc(total + CACHE_LINE_SIZE * 2, GFP_KERNEL);
	if (k_buf_src == NULL)
		return -ENOMEM;

@@ -947,8 +945,7 @@ static int qcedev_hash_cmac(struct qcedev_async_req *qcedev_areq,
	}

	qcedev_areq->sha_req.sreq.src = sg_src;
	sg_set_buf(qcedev_areq->sha_req.sreq.src, k_buf_src, total);
	sg_mark_end(qcedev_areq->sha_req.sreq.src);
	sg_init_one(qcedev_areq->sha_req.sreq.src, k_buf_src, total);

	qcedev_areq->sha_req.sreq.nbytes = total;
	handle->sha_ctxt.diglen = qcedev_areq->sha_op_req.diglen;
@@ -1036,8 +1033,7 @@ static int qcedev_hmac_get_ohash(struct qcedev_async_req *qcedev_areq,
			handle->sha_ctxt.trailing_buf_len);

	qcedev_areq->sha_req.sreq.src = (struct scatterlist *) &sg_src;
	sg_set_buf(qcedev_areq->sha_req.sreq.src, k_src, sha_block_size);
	sg_mark_end(qcedev_areq->sha_req.sreq.src);
	sg_init_one(qcedev_areq->sha_req.sreq.src, k_src, sha_block_size);

	qcedev_areq->sha_req.sreq.nbytes = sha_block_size;
	memset(&handle->sha_ctxt.trailing_buf[0], 0, sha_block_size);
@@ -1203,10 +1199,9 @@ static int qcedev_vbuf_ablk_cipher_max_xfer(struct qcedev_async_req *areq,
	areq->cipher_req.creq.dst = (struct scatterlist *) &sg_src;

	/* In place encryption/decryption */
	sg_set_buf(areq->cipher_req.creq.src,
	sg_init_one(areq->cipher_req.creq.src,
					k_align_dst,
					areq->cipher_op_req.data_len);
	sg_mark_end(areq->cipher_req.creq.src);

	areq->cipher_req.creq.nbytes = areq->cipher_op_req.data_len;
	areq->cipher_req.creq.info = areq->cipher_op_req.iv;