summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-03-03 01:44:14 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-03-03 01:44:14 +0000
commit456ff1cdd771ccdefadb8a9388034e53d327df4e (patch)
treed8123416627c2ff299e564e01db04a1a86a2b261
parent19299a41fbbcf3592508d01ecd3e0a6e13a20cb7 (diff)
parent16e68ba50769e6fcd8a9ed6be6d3fa45145a6e09 (diff)
downloadsecuremsm-android-msm-eos-5.15-tm-wear-kr3-pixel-watch.tar.gz
Merge cherrypicks of ['partner-android-review.googlesource.com/2755568'] into android13-msm-pixelwatch-5.15-24Q1-release.android-wear-13.0.0_r0.14android-msm-eos-5.15-tm-wear-kr3-pixel-watch
Change-Id: Idff2175efec5bb3f1911720c914cac29e5ab71db Signed-off-by: Coastguard Worker <android-build-coastguard-worker@google.com>
-rw-r--r--qseecom/qseecom.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/qseecom/qseecom.c b/qseecom/qseecom.c
index a27c448..e684996 100644
--- a/qseecom/qseecom.c
+++ b/qseecom/qseecom.c
@@ -412,7 +412,7 @@ struct qseecom_client_handle {
struct qseecom_listener_handle {
u32 id;
- bool unregister_pending;
+ bool register_pending;
bool release_called;
};
@@ -1542,6 +1542,11 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data,
struct qseecom_registered_listener_list *new_entry;
struct qseecom_registered_listener_list *ptr_svc;
+ if (data->listener.register_pending) {
+ pr_err("Already a listner registration is in process on this FD\n");
+ return -EINVAL;
+ }
+
K_COPY_FROM_USER(ret, &rcvd_lstnr, argp, sizeof(rcvd_lstnr));
if (ret) {
pr_err("copy_from_user failed\n");
@@ -1551,6 +1556,12 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data,
rcvd_lstnr.sb_size))
return -EFAULT;
+ ptr_svc = __qseecom_find_svc(data->listener.id);
+ if (ptr_svc) {
+ pr_err("Already a listener registered on this data: lid=%d\n", data->listener.id);
+ return -EINVAL;
+ }
+
ptr_svc = __qseecom_find_svc(rcvd_lstnr.listener_id);
if (ptr_svc) {
if (!ptr_svc->unregister_pending) {
@@ -1594,13 +1605,16 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data,
new_entry->svc.listener_id = rcvd_lstnr.listener_id;
new_entry->sb_length = rcvd_lstnr.sb_size;
new_entry->user_virt_sb_base = rcvd_lstnr.virt_sb_base;
+ data->listener.register_pending = true;
if (__qseecom_set_sb_memory(new_entry, data, &rcvd_lstnr)) {
pr_err("qseecom_set_sb_memory failed for listener %d, size %d\n",
rcvd_lstnr.listener_id, rcvd_lstnr.sb_size);
__qseecom_free_tzbuf(&new_entry->sglistinfo_shm);
kfree_sensitive(new_entry);
+ data->listener.register_pending = false;
return -ENOMEM;
}
+ data->listener.register_pending = false;
init_waitqueue_head(&new_entry->rcv_req_wq);
init_waitqueue_head(&new_entry->listener_block_app_wq);