diff options
| author | 2024-12-06 22:05:36 +0000 | |
|---|---|---|
| committer | 2024-12-06 22:05:36 +0000 | |
| commit | 6d24a8fc7be7464a8c4409cb581af0da95c6f1bc (patch) | |
| tree | a3a5cdb52faac885ddaa548b6fab7b9f67842d84 | |
| parent | 535ad888c2ff322a3c69b1026d75a572be53eaad (diff) | |
| parent | ec2b1fb9ea0009da1bc3de0c76ae78d5ff619122 (diff) | |
Merge "android_os_SELinux.cpp: Refactor GetSELabelHandle" into main am: ec2b1fb9ea
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3392494
Change-Id: If63ce9acbbd9b7323abb1a894c66c2830d67c49d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | core/jni/android_os_SELinux.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/core/jni/android_os_SELinux.cpp b/core/jni/android_os_SELinux.cpp index 805d5ad41e83..cd39e6f93fb4 100644 --- a/core/jni/android_os_SELinux.cpp +++ b/core/jni/android_os_SELinux.cpp @@ -34,23 +34,27 @@ namespace android { namespace { -std::atomic<selabel_handle*> sehandle{nullptr}; +std::atomic<selabel_handle *> file_sehandle{nullptr}; -selabel_handle* GetSELabelHandle() { - selabel_handle* h = sehandle.load(); +selabel_handle *GetSELabelHandle_impl(selabel_handle *(*handle_func)(), + std::atomic<selabel_handle *> *handle_cache) { + selabel_handle *h = handle_cache->load(); if (h != nullptr) { return h; } - h = selinux_android_file_context_handle(); + h = handle_func(); selabel_handle* expected = nullptr; - if (!sehandle.compare_exchange_strong(expected, h)) { + if (!handle_cache->compare_exchange_strong(expected, h)) { selabel_close(h); - return sehandle.load(); + return handle_cache->load(); } return h; } +selabel_handle *GetSELabelFileBackendHandle() { + return GetSELabelHandle_impl(selinux_android_file_context_handle, &file_sehandle); +} } struct SecurityContext_Delete { @@ -106,7 +110,7 @@ static jstring fileSelabelLookup(JNIEnv* env, jobject, jstring pathStr) { return NULL; } - auto* selabel_handle = GetSELabelHandle(); + auto *selabel_handle = GetSELabelFileBackendHandle(); if (selabel_handle == NULL) { ALOGE("fileSelabelLookup => Failed to get SEHandle"); return NULL; |