From 8afad293709591aca15f48fdd221c2b3a6bf579d Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Fri, 6 Nov 2020 22:26:51 +0000 Subject: libbinder_ndk: separate libbinder plat headers binder_ibinder_platform.h is a better name for platform extensions, and we don't need specific headers like binder_context.h. Fixing the motivating problem for splitting these (that binder_ibinder_platform.h contains references to libbinder C++) by putting that in its own file. This is cleaner because we expect many platform extensions to libbinder_ndk, to support Rust, or to avoid using libbinder, so the conversion functions can be split off instead. Bug: N/A Test: build Change-Id: Idb00abd10326b3d7346e8e2f99e2186b32513af7 --- libs/binder/ndk/ibinder.cpp | 2 +- .../ndk/include_platform/android/binder_context.h | 47 -------------------- .../android/binder_ibinder_platform.h | 43 ++++++++----------- .../include_platform/android/binder_libbinder.h | 50 ++++++++++++++++++++++ libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp | 2 +- libs/binder/rust/sys/BinderBindings.hpp | 2 +- 6 files changed, 71 insertions(+), 75 deletions(-) delete mode 100644 libs/binder/ndk/include_platform/android/binder_context.h create mode 100644 libs/binder/ndk/include_platform/android/binder_libbinder.h (limited to 'libs') diff --git a/libs/binder/ndk/ibinder.cpp b/libs/binder/ndk/ibinder.cpp index 4610ba9b11..d35debc88c 100644 --- a/libs/binder/ndk/ibinder.cpp +++ b/libs/binder/ndk/ibinder.cpp @@ -14,9 +14,9 @@ * limitations under the License. */ -#include #include #include +#include #include "ibinder_internal.h" #include diff --git a/libs/binder/ndk/include_platform/android/binder_context.h b/libs/binder/ndk/include_platform/android/binder_context.h deleted file mode 100644 index a99d5559ee..0000000000 --- a/libs/binder/ndk/include_platform/android/binder_context.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -__BEGIN_DECLS - -/** - * Makes calls to AIBinder_getCallingSid work if the kernel supports it. This - * must be called on a local binder server before it is sent out to any othe - * process. If this is a remote binder, it will abort. If the kernel doesn't - * support this feature, you'll always get null from AIBinder_getCallingSid. - * - * \param binder local server binder to request security contexts on - */ -__attribute__((weak)) void AIBinder_setRequestingSid(AIBinder* binder, bool requestingSid) - __INTRODUCED_IN(31); - -/** - * Returns the selinux context of the callee. - * - * In order for this to work, the following conditions must be met: - * - The kernel must be new enough to support this feature. - * - The server must have called AIBinder_setRequestingSid. - * - The callee must be a remote process. - * - * \return security context or null if unavailable. The lifetime of this context - * is the lifetime of the transaction. - */ -__attribute__((weak, warn_unused_result)) const char* AIBinder_getCallingSid() __INTRODUCED_IN(31); - -__END_DECLS diff --git a/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h b/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h index 2af65cf1ff..a99d5559ee 100644 --- a/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h +++ b/libs/binder/ndk/include_platform/android/binder_ibinder_platform.h @@ -16,39 +16,32 @@ #pragma once -// binder_context.h used to be part of this header and is included for backwards -// compatibility. -#include - -#if !defined(__ANDROID_APEX__) && !defined(__ANDROID_VNDK__) - #include -#include + +__BEGIN_DECLS /** - * Get libbinder version of binder from AIBinder. - * - * WARNING: function calls to a local object on the other side of this function - * will parcel. When converting between binders, keep in mind it is not as - * efficient as a direct function call. + * Makes calls to AIBinder_getCallingSid work if the kernel supports it. This + * must be called on a local binder server before it is sent out to any othe + * process. If this is a remote binder, it will abort. If the kernel doesn't + * support this feature, you'll always get null from AIBinder_getCallingSid. * - * \param binder binder with ownership retained by the client - * \return platform binder object + * \param binder local server binder to request security contexts on */ -android::sp AIBinder_toPlatformBinder(AIBinder* binder); +__attribute__((weak)) void AIBinder_setRequestingSid(AIBinder* binder, bool requestingSid) + __INTRODUCED_IN(31); /** - * Get libbinder_ndk version of binder from platform binder. + * Returns the selinux context of the callee. * - * WARNING: function calls to a local object on the other side of this function - * will parcel. When converting between binders, keep in mind it is not as - * efficient as a direct function call. + * In order for this to work, the following conditions must be met: + * - The kernel must be new enough to support this feature. + * - The server must have called AIBinder_setRequestingSid. + * - The callee must be a remote process. * - * \param binder platform binder which may be from anywhere (doesn't have to be - * created with libbinder_ndK) - * \return binder with one reference count of ownership given to the client. See - * AIBinder_decStrong + * \return security context or null if unavailable. The lifetime of this context + * is the lifetime of the transaction. */ -AIBinder* AIBinder_fromPlatformBinder(const android::sp& binder); +__attribute__((weak, warn_unused_result)) const char* AIBinder_getCallingSid() __INTRODUCED_IN(31); -#endif +__END_DECLS diff --git a/libs/binder/ndk/include_platform/android/binder_libbinder.h b/libs/binder/ndk/include_platform/android/binder_libbinder.h new file mode 100644 index 0000000000..f0c00e87e6 --- /dev/null +++ b/libs/binder/ndk/include_platform/android/binder_libbinder.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2020 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#if !defined(__ANDROID_APEX__) && !defined(__ANDROID_VNDK__) + +#include +#include + +/** + * Get libbinder version of binder from AIBinder. + * + * WARNING: function calls to a local object on the other side of this function + * will parcel. When converting between binders, keep in mind it is not as + * efficient as a direct function call. + * + * \param binder binder with ownership retained by the client + * \return platform binder object + */ +android::sp AIBinder_toPlatformBinder(AIBinder* binder); + +/** + * Get libbinder_ndk version of binder from platform binder. + * + * WARNING: function calls to a local object on the other side of this function + * will parcel. When converting between binders, keep in mind it is not as + * efficient as a direct function call. + * + * \param binder platform binder which may be from anywhere (doesn't have to be + * created with libbinder_ndK) + * \return binder with one reference count of ownership given to the client. See + * AIBinder_decStrong + */ +AIBinder* AIBinder_fromPlatformBinder(const android::sp& binder); + +#endif diff --git a/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp b/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp index 160b9f2d73..f84d9d3746 100644 --- a/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp +++ b/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp @@ -18,9 +18,9 @@ #include #include #include -#include #include #include +#include #include #include #include diff --git a/libs/binder/rust/sys/BinderBindings.hpp b/libs/binder/rust/sys/BinderBindings.hpp index 303f4a5a86..3f20a4ff09 100644 --- a/libs/binder/rust/sys/BinderBindings.hpp +++ b/libs/binder/rust/sys/BinderBindings.hpp @@ -14,8 +14,8 @@ * limitations under the License. */ -#include #include +#include #include #include #include -- cgit v1.2.3-59-g8ed1b