Revert "Re-land tests for MTE globals"
Revert submission 3236258
Reason for revert: b/374452952
Reverted changes: /q/submissionid:3236258
(cherry picked from https://android-review.googlesource.com/q/commit:c0112570483f4cb8771695fae6d7357e4198029f)
Merged-In: I73a39300205890a387d41ac0e629812e13e8a941
Change-Id: I73a39300205890a387d41ac0e629812e13e8a941
Staged CLs so I don't have to wait for merges before I CP
diff --git a/tests/Android.bp b/tests/Android.bp
index 460b471..b537483 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -429,7 +429,6 @@
"math_test.cpp",
"membarrier_test.cpp",
"memtag_stack_test.cpp",
- "memtag_globals_test.cpp",
"mntent_test.cpp",
"mte_test.cpp",
"netdb_test.cpp",
@@ -897,11 +896,6 @@
"preinit_syscall_test_helper",
"thread_exit_cb_helper",
"tls_properties_helper",
- "memtag_globals_binary",
- "memtag_globals_binary_static",
- "mte_globals_relr_regression_test_b_314038442",
- "mte_globals_relr_regression_test_b_314038442_mte",
- "memtag_globals_dso",
],
data_libs: [
"libatest_simple_zip",
@@ -1293,11 +1287,6 @@
"heap_tagging_static_disabled_helper",
"heap_tagging_static_sync_helper",
"heap_tagging_sync_helper",
- "memtag_globals_binary",
- "memtag_globals_binary_static",
- "memtag_globals_dso",
- "mte_globals_relr_regression_test_b_314038442",
- "mte_globals_relr_regression_test_b_314038442_mte",
"stack_tagging_helper",
"stack_tagging_static_helper",
],
diff --git a/tests/libs/Android.bp b/tests/libs/Android.bp
index 5b86e78..d13ee60 100644
--- a/tests/libs/Android.bp
+++ b/tests/libs/Android.bp
@@ -1903,89 +1903,3 @@
" $(location soong_zip) -o $(out).unaligned -L 0 -C $(genDir)/zipdir -D $(genDir)/zipdir &&" +
" $(location bionic_tests_zipalign) 16384 $(out).unaligned $(out)",
}
-
-cc_defaults {
- name: "memtag_globals_defaults",
- defaults: [
- "bionic_testlib_defaults",
- "bionic_targets_only"
- ],
- cflags: [
- "-Wno-array-bounds",
- "-Wno-unused-variable",
- ],
- header_libs: ["bionic_libc_platform_headers"],
- sanitize: {
- hwaddress: false,
- memtag_heap: true,
- memtag_globals: true,
- diag: {
- memtag_heap: true,
- }
- },
-}
-
-cc_test_library {
- name: "memtag_globals_dso",
- defaults: [ "memtag_globals_defaults" ],
- srcs: ["memtag_globals_dso.cpp"],
-}
-
-cc_test {
- name: "memtag_globals_binary",
- defaults: [ "memtag_globals_defaults" ],
- srcs: ["memtag_globals_binary.cpp"],
- shared_libs: [ "memtag_globals_dso" ],
- // This binary is used in the bionic-unit-tests as a data dependency, and is
- // in the same folder as memtag_globals_dso. But, the default cc_test rules
- // make this binary (when just explicitly built and shoved in
- // /data/nativetest64/) end up in a subfolder called
- // 'memtag_globals_binary'. When this happens, the explicit build fails to
- // find the DSO because the default rpath is just ${ORIGIN}, and because we
- // want this to be usable both from bionic-unit-tests and explicit builds,
- // let's just not put it in a subdirectory.
- no_named_install_directory: true,
-}
-
-cc_test {
- name: "memtag_globals_binary_static",
- defaults: [ "memtag_globals_defaults" ],
- srcs: ["memtag_globals_binary.cpp"],
- static_libs: [ "memtag_globals_dso" ],
- no_named_install_directory: true,
- static_executable: true,
-}
-
-// This is a regression test for b/314038442, where binaries built *without* MTE
-// globals would have out-of-bounds RELR relocations, which where then `ldg`'d,
-// which resulted in linker crashes.
-cc_test {
- name: "mte_globals_relr_regression_test_b_314038442",
- defaults: [
- "bionic_testlib_defaults",
- "bionic_targets_only"
- ],
- cflags: [ "-Wno-array-bounds" ],
- ldflags: [ "-Wl,--pack-dyn-relocs=relr" ],
- srcs: ["mte_globals_relr_regression_test_b_314038442.cpp"],
- no_named_install_directory: true,
- sanitize: {
- memtag_globals: false,
- },
-}
-
-// Same test as above, but also for MTE globals, just for the sake of it.
-cc_test {
- name: "mte_globals_relr_regression_test_b_314038442_mte",
- defaults: [
- "bionic_testlib_defaults",
- "bionic_targets_only"
- ],
- cflags: [ "-Wno-array-bounds" ],
- ldflags: [ "-Wl,--pack-dyn-relocs=relr" ],
- srcs: ["mte_globals_relr_regression_test_b_314038442.cpp"],
- no_named_install_directory: true,
- sanitize: {
- memtag_globals: true,
- },
-}
diff --git a/tests/libs/memtag_globals.h b/tests/libs/memtag_globals.h
deleted file mode 100644
index a03abae..0000000
--- a/tests/libs/memtag_globals.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <utility>
-#include <vector>
-
-void check_tagged(const void* a);
-void check_untagged(const void* a);
-void check_matching_tags(const void* a, const void* b);
-void check_eq(const void* a, const void* b);
-
-void dso_check_assertions(bool enforce_tagged);
-void dso_print_variables();
-
-void print_variable_address(const char* name, const void* ptr);
-void print_variables(const char* header,
- const std::vector<std::pair<const char*, const void*>>& tagged_variables,
- const std::vector<std::pair<const char*, const void*>>& untagged_variables);
diff --git a/tests/libs/memtag_globals_binary.cpp b/tests/libs/memtag_globals_binary.cpp
deleted file mode 100644
index 9248728..0000000
--- a/tests/libs/memtag_globals_binary.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <string>
-#include <vector>
-
-#include "memtag_globals.h"
-
-// Adapted from the LLD test suite: lld/test/ELF/Inputs/aarch64-memtag-globals.s
-
-/// Global variables defined here, of various semantics.
-char global[30] = {};
-__attribute__((no_sanitize("memtag"))) int global_untagged = 0;
-const int const_global = 0;
-static const int hidden_const_global = 0;
-static char hidden_global[12] = {};
-__attribute__((visibility("hidden"))) int hidden_attr_global = 0;
-__attribute__((visibility("hidden"))) const int hidden_attr_const_global = 0;
-
-/// Should be untagged.
-__thread int tls_global;
-__thread static int hidden_tls_global;
-
-/// Tagged, from the other file.
-extern int global_extern;
-/// Untagged, from the other file.
-extern __attribute__((no_sanitize("memtag"))) int global_extern_untagged;
-/// Tagged here, but untagged in the definition found in the sister objfile
-/// (explicitly).
-extern int global_extern_untagged_definition_but_tagged_import;
-
-/// ABS64 relocations. Also, forces symtab entries for local and external
-/// globals.
-char* pointer_to_global = &global[0];
-char* pointer_inside_global = &global[17];
-char* pointer_to_global_end = &global[30];
-char* pointer_past_global_end = &global[48];
-int* pointer_to_global_untagged = &global_untagged;
-const int* pointer_to_const_global = &const_global;
-/// RELATIVE relocations.
-const int* pointer_to_hidden_const_global = &hidden_const_global;
-char* pointer_to_hidden_global = &hidden_global[0];
-int* pointer_to_hidden_attr_global = &hidden_attr_global;
-const int* pointer_to_hidden_attr_const_global = &hidden_attr_const_global;
-/// RELATIVE relocations with special AArch64 MemtagABI semantics, with the
-/// offset ('12' or '16') encoded in the place.
-char* pointer_to_hidden_global_end = &hidden_global[12];
-char* pointer_past_hidden_global_end = &hidden_global[16];
-/// ABS64 relocations.
-int* pointer_to_global_extern = &global_extern;
-int* pointer_to_global_extern_untagged = &global_extern_untagged;
-int* pointer_to_global_extern_untagged_definition_but_tagged_import =
- &global_extern_untagged_definition_but_tagged_import;
-
-// Force materialization of these globals into the symtab.
-int* get_address_to_tls_global() {
- return &tls_global;
-}
-int* get_address_to_hidden_tls_global() {
- return &hidden_tls_global;
-}
-
-static const std::vector<std::pair<const char*, const void*>>& get_expected_tagged_vars() {
- static std::vector<std::pair<const char*, const void*>> expected_tagged_vars = {
- {"global", &global},
- {"pointer_inside_global", pointer_inside_global},
- {"pointer_to_global_end", pointer_to_global_end},
- {"pointer_past_global_end", pointer_past_global_end},
- {"hidden_global", &hidden_global},
- {"hidden_attr_global", &hidden_attr_global},
- {"global_extern", &global_extern},
- };
- return expected_tagged_vars;
-}
-
-static const std::vector<std::pair<const char*, const void*>>& get_expected_untagged_vars() {
- static std::vector<std::pair<const char*, const void*>> expected_untagged_vars = {
- {"global_extern_untagged", &global_extern_untagged},
- {"global_extern_untagged_definition_but_tagged_import",
- &global_extern_untagged_definition_but_tagged_import},
- {"global_untagged", &global_untagged},
- {"const_global", &const_global},
- {"hidden_const_global", &hidden_const_global},
- {"hidden_attr_const_global", &hidden_attr_const_global},
- {"tls_global", &tls_global},
- {"hidden_tls_global", &hidden_tls_global},
- };
- return expected_untagged_vars;
-}
-
-void exe_print_variables() {
- print_variables(" Variables accessible from the binary:\n", get_expected_tagged_vars(),
- get_expected_untagged_vars());
-}
-
-// Dump the addresses of the global variables to stderr
-void dso_print();
-void dso_print_others();
-
-void exe_check_assertions(bool check_pointers_are_tagged) {
- // Check that non-const variables are writeable.
- *pointer_to_global = 0;
- *pointer_inside_global = 0;
- *(pointer_to_global_end - 1) = 0;
- *pointer_to_global_untagged = 0;
- *pointer_to_hidden_global = 0;
- *pointer_to_hidden_attr_global = 0;
- *(pointer_to_hidden_global_end - 1) = 0;
- *pointer_to_global_extern = 0;
- *pointer_to_global_extern_untagged = 0;
- *pointer_to_global_extern_untagged_definition_but_tagged_import = 0;
-
- if (check_pointers_are_tagged) {
- for (const auto& [_, pointer] : get_expected_tagged_vars()) {
- check_tagged(pointer);
- }
- }
-
- for (const auto& [_, pointer] : get_expected_untagged_vars()) {
- check_untagged(pointer);
- }
-
- check_matching_tags(pointer_to_global, pointer_inside_global);
- check_matching_tags(pointer_to_global, pointer_to_global_end);
- check_matching_tags(pointer_to_global, pointer_past_global_end);
- check_eq(pointer_inside_global, pointer_to_global + 17);
- check_eq(pointer_to_global_end, pointer_to_global + 30);
- check_eq(pointer_past_global_end, pointer_to_global + 48);
-
- check_matching_tags(pointer_to_hidden_global, pointer_to_hidden_global_end);
- check_matching_tags(pointer_to_hidden_global, pointer_past_hidden_global_end);
- check_eq(pointer_to_hidden_global_end, pointer_to_hidden_global + 12);
- check_eq(pointer_past_hidden_global_end, pointer_to_hidden_global + 16);
-}
-
-void crash() {
- *pointer_past_global_end = 0;
-}
-
-int main(int argc, char** argv) {
- bool check_pointers_are_tagged = false;
- // For an MTE-capable device, provide argv[1] == '1' to enable the assertions
- // that pointers should be tagged.
- if (argc >= 2 && argv[1][0] == '1') {
- check_pointers_are_tagged = true;
- }
-
- char* heap_ptr = static_cast<char*>(malloc(1));
- print_variable_address("heap address", heap_ptr);
- *heap_ptr = 0;
- if (check_pointers_are_tagged) check_tagged(heap_ptr);
- free(heap_ptr);
-
- exe_print_variables();
- dso_print_variables();
-
- exe_check_assertions(check_pointers_are_tagged);
- dso_check_assertions(check_pointers_are_tagged);
-
- printf("Assertions were passed. Now doing a global-buffer-overflow.\n");
- fflush(stdout);
- crash();
- printf("global-buffer-overflow went uncaught.\n");
- return 0;
-}
diff --git a/tests/libs/memtag_globals_dso.cpp b/tests/libs/memtag_globals_dso.cpp
deleted file mode 100644
index 9ed264e..0000000
--- a/tests/libs/memtag_globals_dso.cpp
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <stdint.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <vector>
-
-#include "memtag_globals.h"
-
-// Adapted from the LLD test suite: lld/test/ELF/Inputs/aarch64-memtag-globals.s
-
-int global_extern;
-static int global_extern_hidden;
-__attribute__((no_sanitize("memtag"))) int global_extern_untagged;
-__attribute__((no_sanitize("memtag"))) int global_extern_untagged_definition_but_tagged_import;
-
-void assertion_failure() {
- exit(1);
-}
-
-void check_tagged(const void* a) {
- uintptr_t a_uptr = reinterpret_cast<uintptr_t>(a);
-#if defined(__aarch64__)
- if ((a_uptr >> 56) == 0) {
- fprintf(stderr, "**********************************\n");
- fprintf(stderr, "Failed assertion:\n");
- fprintf(stderr, " tag(0x%zx) != 0\n", a_uptr);
- fprintf(stderr, "**********************************\n");
-
- assertion_failure();
- }
-#endif // defined(__aarch64__)
-}
-
-void check_untagged(const void* a) {
- uintptr_t a_uptr = reinterpret_cast<uintptr_t>(a);
-#if defined(__aarch64__)
- if ((a_uptr >> 56) != 0) {
- fprintf(stderr, "**********************************\n");
- fprintf(stderr, "Failed assertion:\n");
- fprintf(stderr, " tag(0x%zx) == 0\n", a_uptr);
- fprintf(stderr, "**********************************\n");
-
- assertion_failure();
- }
-#endif // defined(__aarch64__)
-}
-
-void check_matching_tags(const void* a, const void* b) {
- uintptr_t a_uptr = reinterpret_cast<uintptr_t>(a);
- uintptr_t b_uptr = reinterpret_cast<uintptr_t>(b);
-#if defined(__aarch64__)
- if (a_uptr >> 56 != b_uptr >> 56) {
- fprintf(stderr, "**********************************\n");
- fprintf(stderr, "Failed assertion:\n");
- fprintf(stderr, " tag(0x%zx) != tag(0x%zx)\n", a_uptr, b_uptr);
- fprintf(stderr, "**********************************\n");
-
- assertion_failure();
- }
-#endif // defined(__aarch64__)
-}
-
-void check_eq(const void* a, const void* b) {
- if (a != b) {
- fprintf(stderr, "**********************************\n");
- fprintf(stderr, "Failed assertion:\n");
- fprintf(stderr, " %p != %p\n", a, b);
- fprintf(stderr, "**********************************\n");
-
- assertion_failure();
- }
-}
-
-#define LONGEST_VARIABLE_NAME "51"
-void print_variable_address(const char* name, const void* ptr) {
- printf("%" LONGEST_VARIABLE_NAME "s: %16p\n", name, ptr);
-}
-
-static const std::vector<std::pair<const char*, const void*>>& get_expected_tagged_vars() {
- static std::vector<std::pair<const char*, const void*>> expected_tagged_vars = {
- {"global_extern", &global_extern},
- {"global_extern_hidden", &global_extern_hidden},
- };
- return expected_tagged_vars;
-}
-
-static const std::vector<std::pair<const char*, const void*>>& get_expected_untagged_vars() {
- static std::vector<std::pair<const char*, const void*>> expected_untagged_vars = {
- {"global_extern_untagged", &global_extern_untagged},
- {"global_extern_untagged_definition_but_tagged_import",
- &global_extern_untagged_definition_but_tagged_import},
- };
- return expected_untagged_vars;
-}
-
-void dso_print_variables() {
- print_variables(" Variables declared in the DSO:\n", get_expected_tagged_vars(),
- get_expected_untagged_vars());
-}
-
-void print_variables(const char* header,
- const std::vector<std::pair<const char*, const void*>>& tagged_variables,
- const std::vector<std::pair<const char*, const void*>>& untagged_variables) {
- printf("==========================================================\n");
- printf("%s", header);
- printf("==========================================================\n");
- printf(" Variables expected to be tagged:\n");
- printf("----------------------------------------------------------\n");
- for (const auto& [name, pointer] : tagged_variables) {
- print_variable_address(name, pointer);
- }
-
- printf("\n----------------------------------------------------------\n");
- printf(" Variables expected to be untagged:\n");
- printf("----------------------------------------------------------\n");
- for (const auto& [name, pointer] : untagged_variables) {
- print_variable_address(name, pointer);
- }
- printf("\n");
-}
-
-void dso_check_assertions(bool check_pointers_are_tagged) {
- // Check that non-const variables are writeable.
- global_extern = 0;
- global_extern_hidden = 0;
- global_extern_untagged = 0;
- global_extern_untagged_definition_but_tagged_import = 0;
-
- if (check_pointers_are_tagged) {
- for (const auto& [_, pointer] : get_expected_tagged_vars()) {
- check_tagged(pointer);
- }
- }
-
- for (const auto& [_, pointer] : get_expected_untagged_vars()) {
- check_untagged(pointer);
- }
-}
diff --git a/tests/libs/mte_globals_relr_regression_test_b_314038442.cpp b/tests/libs/mte_globals_relr_regression_test_b_314038442.cpp
deleted file mode 100644
index 20bbba9..0000000
--- a/tests/libs/mte_globals_relr_regression_test_b_314038442.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <stdint.h>
-#include <stdio.h>
-
-static volatile char array[0x10000];
-volatile char* volatile oob_ptr = &array[0x111111111];
-
-unsigned char get_tag(__attribute__((unused)) volatile void* ptr) {
-#if defined(__aarch64__)
- return static_cast<unsigned char>(reinterpret_cast<uintptr_t>(ptr) >> 56) & 0xf;
-#else // !defined(__aarch64__)
- return 0;
-#endif // defined(__aarch64__)
-}
-
-int main() {
- printf("Program loaded successfully. %p %p. ", array, oob_ptr);
- if (get_tag(array) != get_tag(oob_ptr)) {
- printf("Tags are mismatched!\n");
- return 1;
- }
- if (get_tag(array) == 0) {
- printf("Tags are zero!\n");
- } else {
- printf("Tags are non-zero\n");
- }
- return 0;
-}
diff --git a/tests/memtag_globals_test.cpp b/tests/memtag_globals_test.cpp
deleted file mode 100644
index ff93e7b..0000000
--- a/tests/memtag_globals_test.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2024 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <gtest/gtest.h>
-
-#if defined(__BIONIC__)
-#include "gtest_globals.h"
-#include "utils.h"
-#endif // defined(__BIONIC__)
-
-#include <android-base/test_utils.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <string>
-#include <tuple>
-
-#include "platform/bionic/mte.h"
-
-class MemtagGlobalsTest : public testing::TestWithParam<bool> {};
-
-TEST_P(MemtagGlobalsTest, test) {
- SKIP_WITH_HWASAN << "MTE globals tests are incompatible with HWASan";
-#if defined(__BIONIC__) && defined(__aarch64__)
- std::string binary = GetTestLibRoot() + "/memtag_globals_binary";
- bool is_static = MemtagGlobalsTest::GetParam();
- if (is_static) {
- binary += "_static";
- }
-
- chmod(binary.c_str(), 0755);
- ExecTestHelper eth;
- eth.SetArgs({binary.c_str(), nullptr});
- eth.Run(
- [&]() {
- execve(binary.c_str(), eth.GetArgs(), eth.GetEnv());
- GTEST_FAIL() << "Failed to execve: " << strerror(errno) << " " << binary.c_str();
- },
- // We catch the global-buffer-overflow and crash only when MTE globals is
- // supported. Note that MTE globals is unsupported for fully static
- // executables, but we should still make sure the binary passes its
- // assertions, just that global variables won't be tagged.
- (mte_supported() && !is_static) ? -SIGSEGV : 0, "Assertions were passed");
-#else
- GTEST_SKIP() << "bionic/arm64 only";
-#endif
-}
-
-INSTANTIATE_TEST_SUITE_P(MemtagGlobalsTest, MemtagGlobalsTest, testing::Bool(),
- [](const ::testing::TestParamInfo<MemtagGlobalsTest::ParamType>& info) {
- if (info.param) return "MemtagGlobalsTest_static";
- return "MemtagGlobalsTest";
- });
-
-TEST(MemtagGlobalsTest, RelrRegressionTestForb314038442) {
- SKIP_WITH_HWASAN << "MTE globals tests are incompatible with HWASan";
-#if defined(__BIONIC__) && defined(__aarch64__)
- std::string binary = GetTestLibRoot() + "/mte_globals_relr_regression_test_b_314038442";
- chmod(binary.c_str(), 0755);
- ExecTestHelper eth;
- eth.SetArgs({binary.c_str(), nullptr});
- eth.Run(
- [&]() {
- execve(binary.c_str(), eth.GetArgs(), eth.GetEnv());
- GTEST_FAIL() << "Failed to execve: " << strerror(errno) << " " << binary.c_str();
- },
- /* exit code */ 0, "Program loaded successfully.*Tags are zero!");
-#else
- GTEST_SKIP() << "bionic/arm64 only";
-#endif
-}
-
-TEST(MemtagGlobalsTest, RelrRegressionTestForb314038442WithMteGlobals) {
- if (!mte_supported()) GTEST_SKIP() << "Must have MTE support.";
-#if defined(__BIONIC__) && defined(__aarch64__)
- std::string binary = GetTestLibRoot() + "/mte_globals_relr_regression_test_b_314038442_mte";
- chmod(binary.c_str(), 0755);
- ExecTestHelper eth;
- eth.SetArgs({binary.c_str(), nullptr});
- eth.Run(
- [&]() {
- execve(binary.c_str(), eth.GetArgs(), eth.GetEnv());
- GTEST_FAIL() << "Failed to execve: " << strerror(errno) << " " << binary.c_str();
- },
- /* exit code */ 0, "Program loaded successfully.*Tags are non-zero");
-#else
- GTEST_SKIP() << "bionic/arm64 only";
-#endif
-}