Merge changes Ibcefd6d9,I249c0815,If59cb6da
* changes:
Remove some duplication in the makefile
linker: add test for zero e_shentsize
Add test for misaligned section header
diff --git a/tests/Android.build.prebuilt.mk b/tests/Android.build.prebuilt.mk
new file mode 100644
index 0000000..d50656c
--- /dev/null
+++ b/tests/Android.build.prebuilt.mk
@@ -0,0 +1,28 @@
+#
+# Copyright (C) 2016 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.
+#
+
+include $(CLEAR_VARS)
+LOCAL_MULTILIB := both
+LOCAL_MODULE := $(module)
+LOCAL_MODULE_PATH_32 := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS)/prebuilt-elf-files
+LOCAL_MODULE_PATH_64 := $(TARGET_OUT_DATA_NATIVE_TESTS)/prebuilt-elf-files
+LOCAL_MODULE_CLASS := EXECUTABLES
+
+LOCAL_SRC_FILES_arm := prebuilt-elf-files/arm/$(module)
+LOCAL_SRC_FILES_arm64 := prebuilt-elf-files/arm64/$(module)
+LOCAL_SRC_FILES_x86 := prebuilt-elf-files/x86/$(module)
+LOCAL_SRC_FILES_x86_64 := prebuilt-elf-files/x86_64/$(module)
+include $(BUILD_PREBUILT)
diff --git a/tests/Android.mk b/tests/Android.mk
index b329831..3fe62a8 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -16,19 +16,18 @@
LOCAL_PATH := $(call my-dir)
-# Move prebuilt test elf-files to $(TARGET_OUT_NATIVE_TESTS)
-include $(CLEAR_VARS)
-LOCAL_MULTILIB := both
-LOCAL_MODULE := libtest_invalid-rw_load_segment.so
-LOCAL_MODULE_PATH_32 := $($(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_DATA_NATIVE_TESTS)/prebuilt-elf-files
-LOCAL_MODULE_PATH_64 := $(TARGET_OUT_DATA_NATIVE_TESTS)/prebuilt-elf-files
-LOCAL_MODULE_CLASS := SHARED_LIBRARY
+# TODO(dimitry): replace with define once https://android-review.googlesource.com/247466 is reverted
+# https://github.com/google/kati/issues/83 is currently blocking it.
-LOCAL_SRC_FILES_arm := prebuilt-elf-files/arm/$(LOCAL_MODULE)
-LOCAL_SRC_FILES_arm64 := prebuilt-elf-files/arm64/$(LOCAL_MODULE)
-LOCAL_SRC_FILES_x86 := prebuilt-elf-files/x86/$(LOCAL_MODULE)
-LOCAL_SRC_FILES_x86_64 := prebuilt-elf-files/x86_64/$(LOCAL_MODULE)
-include $(BUILD_PREBUILT)
+# Move prebuilt test elf-files to $(TARGET_OUT_NATIVE_TESTS)
+module := libtest_invalid-rw_load_segment.so
+include $(LOCAL_PATH)/Android.build.prebuilt.mk
+
+module := libtest_invalid-unaligned_shdr_offset.so
+include $(LOCAL_PATH)/Android.build.prebuilt.mk
+
+module := libtest_invalid-zero_shentsize.so
+include $(LOCAL_PATH)/Android.build.prebuilt.mk
ifeq ($(HOST_OS)-$(HOST_ARCH),$(filter $(HOST_OS)-$(HOST_ARCH),linux-x86 linux-x86_64))
build_host := true
diff --git a/tests/dlfcn_test.cpp b/tests/dlfcn_test.cpp
index a1c5801..6e78082 100644
--- a/tests/dlfcn_test.cpp
+++ b/tests/dlfcn_test.cpp
@@ -1161,4 +1161,21 @@
std::string expected_dlerror = std::string("dlopen failed: \"") + libpath + "\": W + E load segments are not allowed";
ASSERT_STREQ(expected_dlerror.c_str(), dlerror());
}
+
+TEST(dlfcn, dlopen_invalid_unaligned_shdr_offset) {
+ std::string libpath = std::string(getenv("ANDROID_DATA")) + PREBUILT_ELF_PATH + "/libtest_invalid-unaligned_shdr_offset.so";
+ void* handle = dlopen(libpath.c_str(), RTLD_NOW);
+ ASSERT_TRUE(handle == nullptr);
+ std::string expected_dlerror = std::string("dlopen failed: \"") + libpath + "\" has invalid shdr offset/size: ";
+ ASSERT_SUBSTR(expected_dlerror.c_str(), dlerror());
+}
+
+TEST(dlfcn, dlopen_invalid_zero_shentsize) {
+ std::string libpath = std::string(getenv("ANDROID_DATA")) + PREBUILT_ELF_PATH + "/libtest_invalid-zero_shentsize.so";
+ void* handle = dlopen(libpath.c_str(), RTLD_NOW);
+ ASSERT_TRUE(handle == nullptr);
+ std::string expected_dlerror = std::string("dlopen failed: \"") + libpath + "\" has unsupported e_shentsize: 0x0 (expected 0x";
+ ASSERT_SUBSTR(expected_dlerror.c_str(), dlerror());
+}
+
#endif
diff --git a/tests/prebuilt-elf-files/arm/libtest_invalid-unaligned_shdr_offset.so b/tests/prebuilt-elf-files/arm/libtest_invalid-unaligned_shdr_offset.so
new file mode 100755
index 0000000..24bd96e
--- /dev/null
+++ b/tests/prebuilt-elf-files/arm/libtest_invalid-unaligned_shdr_offset.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/arm/libtest_invalid-zero_shentsize.so b/tests/prebuilt-elf-files/arm/libtest_invalid-zero_shentsize.so
new file mode 100755
index 0000000..36085d5
--- /dev/null
+++ b/tests/prebuilt-elf-files/arm/libtest_invalid-zero_shentsize.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/arm64/libtest_invalid-unaligned_shdr_offset.so b/tests/prebuilt-elf-files/arm64/libtest_invalid-unaligned_shdr_offset.so
new file mode 100755
index 0000000..7389d9c
--- /dev/null
+++ b/tests/prebuilt-elf-files/arm64/libtest_invalid-unaligned_shdr_offset.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/arm64/libtest_invalid-zero_shentsize.so b/tests/prebuilt-elf-files/arm64/libtest_invalid-zero_shentsize.so
new file mode 100755
index 0000000..b8d49e3
--- /dev/null
+++ b/tests/prebuilt-elf-files/arm64/libtest_invalid-zero_shentsize.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/x86/libtest_invalid-unaligned_shdr_offset.so b/tests/prebuilt-elf-files/x86/libtest_invalid-unaligned_shdr_offset.so
new file mode 100755
index 0000000..5c9501c
--- /dev/null
+++ b/tests/prebuilt-elf-files/x86/libtest_invalid-unaligned_shdr_offset.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/x86/libtest_invalid-zero_shentsize.so b/tests/prebuilt-elf-files/x86/libtest_invalid-zero_shentsize.so
new file mode 100755
index 0000000..afdfb74
--- /dev/null
+++ b/tests/prebuilt-elf-files/x86/libtest_invalid-zero_shentsize.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/x86_64/libtest_invalid-unaligned_shdr_offset.so b/tests/prebuilt-elf-files/x86_64/libtest_invalid-unaligned_shdr_offset.so
new file mode 100755
index 0000000..0d42283
--- /dev/null
+++ b/tests/prebuilt-elf-files/x86_64/libtest_invalid-unaligned_shdr_offset.so
Binary files differ
diff --git a/tests/prebuilt-elf-files/x86_64/libtest_invalid-zero_shentsize.so b/tests/prebuilt-elf-files/x86_64/libtest_invalid-zero_shentsize.so
new file mode 100755
index 0000000..079f7ec
--- /dev/null
+++ b/tests/prebuilt-elf-files/x86_64/libtest_invalid-zero_shentsize.so
Binary files differ