diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2021-06-18 15:28:57 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-06-18 15:28:57 +0000 |
commit | e37cdac52a575a68934af58b47767219a91acf07 (patch) | |
tree | e3a91632d79ad0ecbdee8dd88084948b5f384041 /gralloc4/src | |
parent | 90c71cad595677cf8b0c889a6d443534d5d1a70d (diff) | |
parent | d348f15eac59e1c077480c1a9881ebe37360567c (diff) | |
download | gchips-e37cdac52a575a68934af58b47767219a91acf07.tar.gz |
Merge "vendorgraphicbuffer: add validation on metadata before operating" into sc-dev
Diffstat (limited to 'gralloc4/src')
-rw-r--r-- | gralloc4/src/core/mali_gralloc_reference.cpp | 22 | ||||
-rw-r--r-- | gralloc4/src/core/mali_gralloc_reference.h | 1 |
2 files changed, 23 insertions, 0 deletions
diff --git a/gralloc4/src/core/mali_gralloc_reference.cpp b/gralloc4/src/core/mali_gralloc_reference.cpp index 22d8aa0..e24d9ff 100644 --- a/gralloc4/src/core/mali_gralloc_reference.cpp +++ b/gralloc4/src/core/mali_gralloc_reference.cpp @@ -116,3 +116,25 @@ int mali_gralloc_reference_release(buffer_handle_t handle, bool canFree) pthread_mutex_unlock(&s_map_lock); return 0; } + +int mali_gralloc_reference_validate(buffer_handle_t handle) +{ + if (private_handle_t::validate(handle) < 0) + { + MALI_GRALLOC_LOGE("Reference invalid buffer %p, returning error", handle); + return -EINVAL; + } + + const auto *hnd = (private_handle_t *)handle; + pthread_mutex_lock(&s_map_lock); + + if (hnd->allocating_pid == getpid() || hnd->remote_pid == getpid()) { + pthread_mutex_unlock(&s_map_lock); + return 0; + } else { + pthread_mutex_unlock(&s_map_lock); + MALI_GRALLOC_LOGE("Reference unimported buffer %p, returning error", handle); + return -EINVAL; + } +} + diff --git a/gralloc4/src/core/mali_gralloc_reference.h b/gralloc4/src/core/mali_gralloc_reference.h index f2afc61..555be08 100644 --- a/gralloc4/src/core/mali_gralloc_reference.h +++ b/gralloc4/src/core/mali_gralloc_reference.h @@ -23,5 +23,6 @@ int mali_gralloc_reference_retain(buffer_handle_t handle); int mali_gralloc_reference_release(buffer_handle_t handle, bool canFree); +int mali_gralloc_reference_validate(buffer_handle_t handle); #endif /* MALI_GRALLOC_REFERENCE_H_ */ |