This uses the SELinux audit messages generated when an untrusted app, targeting SDK 28 or lower, executes native code from an app data directory. "Executes" here covers memory mapping a file with execute permission (including using dl_open) or calling execve. As with dynamic loading of DEX code we write a hash of the contents of the file executed to the event log. The existing unit and integration tests are extended to verify the new behaviour. Bug: 111338677 Test: atest -p services/core/java/com/android/server/pm/dex Change-Id: Ifbb3b338135db413be2cd83b1a8e7499d61d88dd
84 lines
2.2 KiB
Makefile
84 lines
2.2 KiB
Makefile
#
|
|
# Copyright 2017 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.
|
|
#
|
|
|
|
LOCAL_PATH:= $(call my-dir)
|
|
|
|
# Build a tiny library that the test app can dynamically load
|
|
|
|
include $(CLEAR_VARS)
|
|
|
|
LOCAL_MODULE_TAGS := tests
|
|
LOCAL_MODULE := DexLoggerTestLibrary
|
|
LOCAL_SRC_FILES := $(call all-java-files-under, src/com/android/dcl)
|
|
|
|
include $(BUILD_JAVA_LIBRARY)
|
|
|
|
dexloggertest_jar := $(LOCAL_BUILT_MODULE)
|
|
|
|
|
|
# Also build a native library that the test app can dynamically load
|
|
|
|
include $(CLEAR_VARS)
|
|
|
|
LOCAL_MODULE_TAGS := tests
|
|
LOCAL_MODULE := DexLoggerNativeTestLibrary
|
|
LOCAL_MULTILIB := first
|
|
LOCAL_SRC_FILES := src/cpp/com_android_dcl_Jni.cpp
|
|
LOCAL_C_INCLUDES += \
|
|
$(JNI_H_INCLUDE)
|
|
LOCAL_SDK_VERSION := 28
|
|
LOCAL_NDK_STL_VARIANT := c++_static
|
|
|
|
include $(BUILD_SHARED_LIBRARY)
|
|
|
|
dexloggertest_so := $(LOCAL_BUILT_MODULE)
|
|
|
|
# And a standalone native executable that we can exec.
|
|
|
|
include $(CLEAR_VARS)
|
|
|
|
LOCAL_MODULE_TAGS := tests
|
|
LOCAL_MODULE := DexLoggerNativeExecutable
|
|
LOCAL_SRC_FILES := src/cpp/test_executable.cpp
|
|
|
|
include $(BUILD_EXECUTABLE)
|
|
|
|
dexloggertest_executable := $(LOCAL_BUILT_MODULE)
|
|
|
|
# Build the test app itself
|
|
|
|
include $(CLEAR_VARS)
|
|
|
|
LOCAL_MODULE_TAGS := tests
|
|
LOCAL_PACKAGE_NAME := DexLoggerIntegrationTests
|
|
LOCAL_SDK_VERSION := current
|
|
LOCAL_COMPATIBILITY_SUITE := device-tests
|
|
LOCAL_CERTIFICATE := shared
|
|
LOCAL_SRC_FILES := $(call all-java-files-under, src/com/android/server/pm)
|
|
|
|
LOCAL_STATIC_JAVA_LIBRARIES := \
|
|
android-support-test \
|
|
truth-prebuilt \
|
|
|
|
# This gets us the javalib.jar built by DexLoggerTestLibrary above as well as the various
|
|
# native binaries.
|
|
LOCAL_JAVA_RESOURCE_FILES := \
|
|
$(dexloggertest_jar) \
|
|
$(dexloggertest_so) \
|
|
$(dexloggertest_executable)
|
|
|
|
include $(BUILD_PACKAGE)
|