From 3428f9be71b0d20978d11d63b5d82962b88d02bf Mon Sep 17 00:00:00 2001 From: dimitry Date: Wed, 29 Jan 2025 13:24:43 +0100 Subject: nativebridge: Add isNativeBridgeFunctionPointer method This method lets native bridge report if particular pointer is in the region of code executable by native bridge implementation. Bug: 393035780 Test: atest art/libnativebridge/tests Change-Id: Icaec80cb7efae5b918aed0a98216cbfaeaba330d --- libnativebridge/native_bridge.cc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'libnativebridge/native_bridge.cc') diff --git a/libnativebridge/native_bridge.cc b/libnativebridge/native_bridge.cc index 4461f79919..af85d4ee35 100644 --- a/libnativebridge/native_bridge.cc +++ b/libnativebridge/native_bridge.cc @@ -133,6 +133,8 @@ enum NativeBridgeImplementationVersion { PRE_ZYGOTE_FORK_VERSION = 6, // The version with critical_native support CRITICAL_NATIVE_SUPPORT_VERSION = 7, + // The version with native bridge detection fallback for function pointers + IDENTIFY_NATIVELY_BRIDGED_FUNCTION_POINTERS_VERSION = 8, }; // Whether we had an error at some point. @@ -732,6 +734,18 @@ void* NativeBridgeLoadLibraryExt(const char* libpath, int flag, native_bridge_na return nullptr; } +bool NativeBridgeIsNativeBridgeFunctionPointer(const void* method) { + if (NativeBridgeInitialized()) { + if (isCompatibleWith(IDENTIFY_NATIVELY_BRIDGED_FUNCTION_POINTERS_VERSION)) { + return callbacks->isNativeBridgeFunctionPointer(method); + } else { + ALOGW("not compatible with version %d, unable to call isNativeBridgeFunctionPointer", + IDENTIFY_NATIVELY_BRIDGED_FUNCTION_POINTERS_VERSION); + } + } + return false; +} + } // extern "C" } // namespace android -- cgit v1.2.3-59-g8ed1b