diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-03-03 01:44:14 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2024-03-03 01:44:14 +0000 |
commit | 456ff1cdd771ccdefadb8a9388034e53d327df4e (patch) | |
tree | d8123416627c2ff299e564e01db04a1a86a2b261 | |
parent | 19299a41fbbcf3592508d01ecd3e0a6e13a20cb7 (diff) | |
parent | 16e68ba50769e6fcd8a9ed6be6d3fa45145a6e09 (diff) | |
download | securemsm-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.c | 16 |
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); |