This patch set including the following modify:
1. Some optimization of ECC and Digest algorithms to improve
the performance of them.
2. Some bugfix and cleanup of the code.
3. Fixup the README.md info about enviroment variable.
Zhiqi Song (10):
uadk_engine: bugfix null dereference in abnormal conditions
digest: cleanup magic number in digest
dh: cleanup redundant macro definition
ecc: bugfix about repeated alg and dev queries
ecc: bugfix the conversion of sm2 pubkey point
uadk_engine: modify static check problem
ecc: optimize sm2 ctrl process to improve performance
digest: remove soft ctx allocation in digest init process
ecc: optimize sm2 update session process
uadk_engine: fix openssl config info
README.md | 16 ++++----
src/uadk_async.c | 22 +++++++++--
src/uadk_async.h | 7 +++-
src/uadk_dh.c | 1 -
src/uadk_digest.c | 98 +++++++++++++++++++++++++++--------------------
src/uadk_ec.c | 79 ++++++++++++++++++++++++++++----------
src/uadk_ecx.c | 23 +++++++++--
src/uadk_pkey.c | 66 +++++++++++++++++++------------
src/uadk_pkey.h | 13 ++++++-
src/uadk_rsa.c | 18 +++++++++
src/uadk_sm2.c | 87 ++++++++++++++++++++++++++++++-----------
11 files changed, 303 insertions(+), 127 deletions(-)
--
2.30.0
This patch set including the following modify:
1. Some optimization of ECC and Digest algorithms to improve
the performance of them.
2. Some bugfix and cleanup of the code.
3. Fixup the README.md info about enviroment variable.
Zhiqi Song (10):
uadk_engine: bugfix null dereference in abnormal conditions
digest: cleanup magic number in digest
dh: cleanup redundant macro definition
ecc: bugfix about repeated alg and dev queries
ecc: bugfix the conversion of sm2 pubkey point
uadk_engine: modify static check problem
ecc: optimize sm2 ctrl process to improve performance
digest: remove soft ctx allocation in digest init process
ecc: optimize sm2 update session process
uadk_engine: fix openssl config info
README.md | 16 ++++----
src/uadk_async.c | 22 +++++++++--
src/uadk_async.h | 7 +++-
src/uadk_dh.c | 1 -
src/uadk_digest.c | 98 +++++++++++++++++++++++++++--------------------
src/uadk_ec.c | 79 ++++++++++++++++++++++++++++----------
src/uadk_ecx.c | 23 +++++++++--
src/uadk_pkey.c | 66 +++++++++++++++++++------------
src/uadk_pkey.h | 13 ++++++-
src/uadk_rsa.c | 18 +++++++++
src/uadk_sm2.c | 87 ++++++++++++++++++++++++++++++-----------
11 files changed, 303 insertions(+), 127 deletions(-)
--
2.30.0
The inode can be different in a container, for example, a docker and host
both open the same uacce parent device, which uses the same uacce struct
but different inode, so uacce->inode is not enough.
What's worse, when docker stops, the inode will be destroyed as well,
causing use-after-free in uacce_remove.
So use q->filep->f_mapping to replace uacce->inode->i_mapping.
Signed-off-by: Weili Qian <qianweili(a)huawei.com>
Signed-off-by: Zhangfei Gao <zhangfei.gao(a)linaro.org>
---
drivers/misc/uacce/uacce.c | 16 +++++++++-------
include/linux/uacce.h | 4 ++--
2 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/misc/uacce/uacce.c b/drivers/misc/uacce/uacce.c
index 346bd7cf2e94..740ace422baa 100644
--- a/drivers/misc/uacce/uacce.c
+++ b/drivers/misc/uacce/uacce.c
@@ -166,8 +166,8 @@ static int uacce_fops_open(struct inode *inode, struct file *filep)
init_waitqueue_head(&q->wait);
filep->private_data = q;
- uacce->inode = inode;
q->state = UACCE_Q_INIT;
+ q->private_data = filep;
mutex_init(&q->mutex);
list_add(&q->list, &uacce->queues);
mutex_unlock(&uacce->mutex);
@@ -574,12 +574,6 @@ void uacce_remove(struct uacce_device *uacce)
if (!uacce)
return;
- /*
- * unmap remaining mapping from user space, preventing user still
- * access the mmaped area while parent device is already removed
- */
- if (uacce->inode)
- unmap_mapping_range(uacce->inode->i_mapping, 0, 0, 1);
/*
* uacce_fops_open() may be running concurrently, even after we remove
@@ -589,6 +583,8 @@ void uacce_remove(struct uacce_device *uacce)
mutex_lock(&uacce->mutex);
/* ensure no open queue remains */
list_for_each_entry_safe(q, next_q, &uacce->queues, list) {
+ struct file *filep = q->private_data;
+
/*
* Taking q->mutex ensures that fops do not use the defunct
* uacce->ops after the queue is disabled.
@@ -597,6 +593,12 @@ void uacce_remove(struct uacce_device *uacce)
uacce_put_queue(q);
mutex_unlock(&q->mutex);
uacce_unbind_queue(q);
+
+ /*
+ * unmap remaining mapping from user space, preventing user still
+ * access the mmaped area while parent device is already removed
+ */
+ unmap_mapping_range(filep->f_mapping, 0, 0, 1);
}
/* disable sva now since no opened queues */
diff --git a/include/linux/uacce.h b/include/linux/uacce.h
index 0a81c3dfd26c..64b800b74436 100644
--- a/include/linux/uacce.h
+++ b/include/linux/uacce.h
@@ -86,6 +86,7 @@ enum uacce_q_state {
* @state: queue state machine
* @pasid: pasid associated to the mm
* @handle: iommu_sva handle returned by iommu_sva_bind_device()
+ * @private_data: private data for saving filep
*/
struct uacce_queue {
struct uacce_device *uacce;
@@ -97,6 +98,7 @@ struct uacce_queue {
enum uacce_q_state state;
u32 pasid;
struct iommu_sva *handle;
+ void *private_data;
};
/**
@@ -114,7 +116,6 @@ struct uacce_queue {
* @mutex: protects uacce operation
* @priv: private pointer of the uacce
* @queues: list of queues
- * @inode: core vfs
*/
struct uacce_device {
const char *algs;
@@ -130,7 +131,6 @@ struct uacce_device {
struct mutex mutex;
void *priv;
struct list_head queues;
- struct inode *inode;
};
#if IS_ENABLED(CONFIG_UACCE)
--
2.39.2 (Apple Git-143)