Loading libs/binder/Stability.cpp +14 −2 Original line number Diff line number Diff line Loading @@ -38,18 +38,30 @@ Stability::Category Stability::Category::currentFromLevel(Level level) { }; } void Stability::forceDowngradeCompilationUnit(const sp<IBinder>& binder) { void Stability::forceDowngradeToStability(const sp<IBinder>& binder, Level level) { // Downgrading a remote binder would require also copying the version from // the binder sent here. In practice though, we don't need to downgrade the // stability of a remote binder, since this would as an effect only restrict // what we can do to it. LOG_ALWAYS_FATAL_IF(!binder || !binder->localBinder(), "Can only downgrade local binder"); auto stability = Category::currentFromLevel(getLocalLevel()); auto stability = Category::currentFromLevel(level); status_t result = setRepr(binder.get(), stability.repr(), REPR_LOG | REPR_ALLOW_DOWNGRADE); LOG_ALWAYS_FATAL_IF(result != OK, "Should only mark known object."); } void Stability::forceDowngradeToLocalStability(const sp<IBinder>& binder) { forceDowngradeToStability(binder, getLocalLevel()); } void Stability::forceDowngradeToSystemStability(const sp<IBinder>& binder) { forceDowngradeToStability(binder, Level::SYSTEM); } void Stability::forceDowngradeToVendorStability(const sp<IBinder>& binder) { forceDowngradeToStability(binder, Level::VENDOR); } std::string Stability::Category::debugString() { return levelString(level) + " wire protocol version " + std::to_string(version); Loading libs/binder/include/binder/Stability.h +30 −2 Original line number Diff line number Diff line Loading @@ -54,8 +54,33 @@ public: // Given a binder interface at a certain stability, there may be some // requirements associated with that higher stability level. For instance, a // VINTF stability binder is required to be in the VINTF manifest. This API // can be called to use that same interface within a partition. static void forceDowngradeCompilationUnit(const sp<IBinder>& binder); // can be called to use that same interface within the local partition. static void forceDowngradeToLocalStability(const sp<IBinder>& binder); // WARNING: The only client of // - forceDowngradeToSystemStability() and; // - korceDowngradeToVendorStability() // should be AIBinder_forceDowngradeToLocalStability(). // // getLocalLevel() in libbinder returns Level::SYSTEM when called // from libbinder_ndk (even on vendor partition). So we explicitly provide // these methods for use by the NDK API: // AIBinder_forceDowngradeToLocalStability(). // // This allows correctly downgrading the binder's stability to either system/vendor, // depending on the partition. // Given a binder interface at a certain stability, there may be some // requirements associated with that higher stability level. For instance, a // VINTF stability binder is required to be in the VINTF manifest. This API // can be called to use that same interface within the vendor partition. static void forceDowngradeToVendorStability(const sp<IBinder>& binder); // Given a binder interface at a certain stability, there may be some // requirements associated with that higher stability level. For instance, a // VINTF stability binder is required to be in the VINTF manifest. This API // can be called to use that same interface within the system partition. static void forceDowngradeToSystemStability(const sp<IBinder>& binder); // WARNING: Below APIs are only ever expected to be called by auto-generated code. // Instead of calling them, you should set the stability of a .aidl interface Loading Loading @@ -146,6 +171,9 @@ private: // returns the stability according to how this was built static Level getLocalLevel(); // Downgrades binder stability to the specified level. static void forceDowngradeToStability(const sp<IBinder>& binder, Level level); enum { REPR_NONE = 0, REPR_LOG = 1, Loading libs/binder/ndk/include_platform/android/binder_stability.h +24 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,18 @@ static inline void AIBinder_markCompilationUnitStability(AIBinder* binder) { AIBinder_markVendorStability(binder); } /** * Given a binder interface at a certain stability, there may be some * requirements associated with that higher stability level. For instance, a * VINTF stability binder is required to be in the VINTF manifest. This API * can be called to use that same interface within the vendor partition. */ void AIBinder_forceDowngradeToVendorStability(AIBinder* binder); static inline void AIBinder_forceDowngradeToLocalStability(AIBinder* binder) { AIBinder_forceDowngradeToVendorStability(binder); } #else // defined(__ANDROID_VENDOR__) enum { Loading @@ -62,6 +74,18 @@ static inline void AIBinder_markCompilationUnitStability(AIBinder* binder) { AIBinder_markSystemStability(binder); } /** * Given a binder interface at a certain stability, there may be some * requirements associated with that higher stability level. For instance, a * VINTF stability binder is required to be in the VINTF manifest. This API * can be called to use that same interface within the system partition. */ void AIBinder_forceDowngradeToSystemStability(AIBinder* binder); static inline void AIBinder_forceDowngradeToLocalStability(AIBinder* binder) { AIBinder_forceDowngradeToSystemStability(binder); } #endif // defined(__ANDROID_VENDOR__) /** Loading libs/binder/ndk/libbinder_ndk.map.txt +3 −0 Original line number Diff line number Diff line Loading @@ -127,6 +127,9 @@ LIBBINDER_NDK31 { # introduced=31 AServiceManager_tryUnregister; # llndk AServiceManager_reRegister; # llndk AIBinder_forceDowngradeToSystemStability; # apex AIBinder_forceDowngradeToVendorStability; # llndk AIBinder_Class_getDescriptor; AIBinder_Weak_clone; AIBinder_Weak_lt; Loading libs/binder/ndk/stability.cpp +10 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ using ::android::internal::Stability; #error libbinder_ndk should only be built in a system context #endif // explicit extern because symbol is only declared in header when __ANDROID_VNDK__ // explicit extern because symbol is only declared in header when __ANDROID_VENDOR__ extern "C" void AIBinder_markVendorStability(AIBinder* binder) { Stability::markVndk(binder->getBinder().get()); } Loading @@ -43,3 +43,12 @@ void AIBinder_markSystemStability(AIBinder* binder) { void AIBinder_markVintfStability(AIBinder* binder) { Stability::markVintf(binder->getBinder().get()); } // explicit extern because symbol is only declared in header when __ANDROID_VENDOR__ extern "C" void AIBinder_forceDowngradeToVendorStability(AIBinder* binder) { Stability::forceDowngradeToVendorStability(binder->getBinder()); } void AIBinder_forceDowngradeToSystemStability(AIBinder* binder) { Stability::forceDowngradeToSystemStability(binder->getBinder()); } Loading
libs/binder/Stability.cpp +14 −2 Original line number Diff line number Diff line Loading @@ -38,18 +38,30 @@ Stability::Category Stability::Category::currentFromLevel(Level level) { }; } void Stability::forceDowngradeCompilationUnit(const sp<IBinder>& binder) { void Stability::forceDowngradeToStability(const sp<IBinder>& binder, Level level) { // Downgrading a remote binder would require also copying the version from // the binder sent here. In practice though, we don't need to downgrade the // stability of a remote binder, since this would as an effect only restrict // what we can do to it. LOG_ALWAYS_FATAL_IF(!binder || !binder->localBinder(), "Can only downgrade local binder"); auto stability = Category::currentFromLevel(getLocalLevel()); auto stability = Category::currentFromLevel(level); status_t result = setRepr(binder.get(), stability.repr(), REPR_LOG | REPR_ALLOW_DOWNGRADE); LOG_ALWAYS_FATAL_IF(result != OK, "Should only mark known object."); } void Stability::forceDowngradeToLocalStability(const sp<IBinder>& binder) { forceDowngradeToStability(binder, getLocalLevel()); } void Stability::forceDowngradeToSystemStability(const sp<IBinder>& binder) { forceDowngradeToStability(binder, Level::SYSTEM); } void Stability::forceDowngradeToVendorStability(const sp<IBinder>& binder) { forceDowngradeToStability(binder, Level::VENDOR); } std::string Stability::Category::debugString() { return levelString(level) + " wire protocol version " + std::to_string(version); Loading
libs/binder/include/binder/Stability.h +30 −2 Original line number Diff line number Diff line Loading @@ -54,8 +54,33 @@ public: // Given a binder interface at a certain stability, there may be some // requirements associated with that higher stability level. For instance, a // VINTF stability binder is required to be in the VINTF manifest. This API // can be called to use that same interface within a partition. static void forceDowngradeCompilationUnit(const sp<IBinder>& binder); // can be called to use that same interface within the local partition. static void forceDowngradeToLocalStability(const sp<IBinder>& binder); // WARNING: The only client of // - forceDowngradeToSystemStability() and; // - korceDowngradeToVendorStability() // should be AIBinder_forceDowngradeToLocalStability(). // // getLocalLevel() in libbinder returns Level::SYSTEM when called // from libbinder_ndk (even on vendor partition). So we explicitly provide // these methods for use by the NDK API: // AIBinder_forceDowngradeToLocalStability(). // // This allows correctly downgrading the binder's stability to either system/vendor, // depending on the partition. // Given a binder interface at a certain stability, there may be some // requirements associated with that higher stability level. For instance, a // VINTF stability binder is required to be in the VINTF manifest. This API // can be called to use that same interface within the vendor partition. static void forceDowngradeToVendorStability(const sp<IBinder>& binder); // Given a binder interface at a certain stability, there may be some // requirements associated with that higher stability level. For instance, a // VINTF stability binder is required to be in the VINTF manifest. This API // can be called to use that same interface within the system partition. static void forceDowngradeToSystemStability(const sp<IBinder>& binder); // WARNING: Below APIs are only ever expected to be called by auto-generated code. // Instead of calling them, you should set the stability of a .aidl interface Loading Loading @@ -146,6 +171,9 @@ private: // returns the stability according to how this was built static Level getLocalLevel(); // Downgrades binder stability to the specified level. static void forceDowngradeToStability(const sp<IBinder>& binder, Level level); enum { REPR_NONE = 0, REPR_LOG = 1, Loading
libs/binder/ndk/include_platform/android/binder_stability.h +24 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,18 @@ static inline void AIBinder_markCompilationUnitStability(AIBinder* binder) { AIBinder_markVendorStability(binder); } /** * Given a binder interface at a certain stability, there may be some * requirements associated with that higher stability level. For instance, a * VINTF stability binder is required to be in the VINTF manifest. This API * can be called to use that same interface within the vendor partition. */ void AIBinder_forceDowngradeToVendorStability(AIBinder* binder); static inline void AIBinder_forceDowngradeToLocalStability(AIBinder* binder) { AIBinder_forceDowngradeToVendorStability(binder); } #else // defined(__ANDROID_VENDOR__) enum { Loading @@ -62,6 +74,18 @@ static inline void AIBinder_markCompilationUnitStability(AIBinder* binder) { AIBinder_markSystemStability(binder); } /** * Given a binder interface at a certain stability, there may be some * requirements associated with that higher stability level. For instance, a * VINTF stability binder is required to be in the VINTF manifest. This API * can be called to use that same interface within the system partition. */ void AIBinder_forceDowngradeToSystemStability(AIBinder* binder); static inline void AIBinder_forceDowngradeToLocalStability(AIBinder* binder) { AIBinder_forceDowngradeToSystemStability(binder); } #endif // defined(__ANDROID_VENDOR__) /** Loading
libs/binder/ndk/libbinder_ndk.map.txt +3 −0 Original line number Diff line number Diff line Loading @@ -127,6 +127,9 @@ LIBBINDER_NDK31 { # introduced=31 AServiceManager_tryUnregister; # llndk AServiceManager_reRegister; # llndk AIBinder_forceDowngradeToSystemStability; # apex AIBinder_forceDowngradeToVendorStability; # llndk AIBinder_Class_getDescriptor; AIBinder_Weak_clone; AIBinder_Weak_lt; Loading
libs/binder/ndk/stability.cpp +10 −1 Original line number Diff line number Diff line Loading @@ -31,7 +31,7 @@ using ::android::internal::Stability; #error libbinder_ndk should only be built in a system context #endif // explicit extern because symbol is only declared in header when __ANDROID_VNDK__ // explicit extern because symbol is only declared in header when __ANDROID_VENDOR__ extern "C" void AIBinder_markVendorStability(AIBinder* binder) { Stability::markVndk(binder->getBinder().get()); } Loading @@ -43,3 +43,12 @@ void AIBinder_markSystemStability(AIBinder* binder) { void AIBinder_markVintfStability(AIBinder* binder) { Stability::markVintf(binder->getBinder().get()); } // explicit extern because symbol is only declared in header when __ANDROID_VENDOR__ extern "C" void AIBinder_forceDowngradeToVendorStability(AIBinder* binder) { Stability::forceDowngradeToVendorStability(binder->getBinder()); } void AIBinder_forceDowngradeToSystemStability(AIBinder* binder) { Stability::forceDowngradeToSystemStability(binder->getBinder()); }