diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-26 22:02:02 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-10-26 22:02:02 +0000 |
commit | d1d833365820cd37cd43767e9624048498e1f4b9 (patch) | |
tree | 67294ff4698e560d092c5a48629387bbd6646957 | |
parent | 08a961cdc5028bb7d66800ad45cf05883bdc9535 (diff) | |
parent | 08d898a611e7de8dbdb3bd8d7513e61d57951efe (diff) |
Snap for 7855123 from 08d898a611e7de8dbdb3bd8d7513e61d57951efe to t-keystone-qcom-release
Change-Id: Iede5e9ca3a70e429ba24967e52d4168a431fbe5c
-rw-r--r-- | src/fastrpc_apps_user.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/fastrpc_apps_user.c b/src/fastrpc_apps_user.c index 7d159cf..1dbc58e 100644 --- a/src/fastrpc_apps_user.c +++ b/src/fastrpc_apps_user.c @@ -560,11 +560,31 @@ static int fdlist_fd_from_buf(void* buf, int bufLen, int* nova, void** base, int return 0; } +static inline int is_valid_local_handle(struct handle_info* hinfo) { + int domain = 0; + QNode* pn = NULL; + struct handle_info* hi = NULL; + + for (domain = 0; domain < NUM_DOMAINS_EXTEND; domain++) { + pthread_mutex_lock(&hlist[domain].mut); + QLIST_FOR_ALL(&hlist[domain].ql, pn) { + hi = STD_RECOVER_REC(struct handle_info, qn, pn); + if (hi == hinfo) { + pthread_mutex_unlock(&hlist[domain].mut); + return 1; + } + } + pthread_mutex_unlock(&hlist[domain].mut); + } + return 0; +} + static int verify_local_handle(remote_handle64 local) { struct handle_info* hinfo = (struct handle_info*)(uintptr_t)local; int nErr = AEE_SUCCESS; VERIFYC(hinfo, AEE_EMEMPTR); + VERIFYC(is_valid_local_handle(hinfo), AEE_EBADHANDLE); VERIFYC((hinfo->hlist >= &hlist[0]) && (hinfo->hlist < &hlist[NUM_DOMAINS_EXTEND]), AEE_EMEMPTR); VERIFYC(QNode_IsQueuedZ(&hinfo->qn), AEE_ENOSUCHHANDLE); bail: |