aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-08-20 07:29:53 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-08-20 07:29:53 +0000
commit9b9393942620e5103cf129ff424f32c41dddff3f (patch)
tree3b34c732d69f37b246ced49e682a40e6329f4538
parentd65d9ded57f16c00aaea386183e542e5c4456c5b (diff)
parentc88fe932733519e71c77d4fc4405fc38a6cba94d (diff)
downloadbionic-9b9393942620e5103cf129ff424f32c41dddff3f.tar.gz
release-request-369362fc-cc6c-4cb1-95c0-90b5ac7c52cb-for-git_oc-mr1-release-4288633 snap-temp-L81700000095141745
Change-Id: Ice5606c92e51cd72ab0fb6ff77f4e18b428bc511
-rw-r--r--libc/private/CFIShadow.h6
-rw-r--r--libdl/libdl.arm.map1
-rw-r--r--libdl/libdl.arm64.map1
-rw-r--r--libdl/libdl.map.txt1
-rw-r--r--libdl/libdl.mips.map1
-rw-r--r--libdl/libdl.mips64.map1
-rw-r--r--libdl/libdl.x86.map1
-rw-r--r--libdl/libdl.x86_64.map1
-rw-r--r--libdl/libdl_cfi.cpp5
-rw-r--r--linker/linker.cpp3
-rw-r--r--tests/cfi_test.cpp3
11 files changed, 20 insertions, 4 deletions
diff --git a/libc/private/CFIShadow.h b/libc/private/CFIShadow.h
index 26351db40..1423d86f7 100644
--- a/libc/private/CFIShadow.h
+++ b/libc/private/CFIShadow.h
@@ -61,10 +61,8 @@ class CFIShadow {
// Alignment of __cfi_check.
static constexpr uintptr_t kCfiCheckAlign = 1UL << kCfiCheckGranularity; // 4K
-#if defined(__aarch64__)
- static constexpr uintptr_t kMaxTargetAddr = 0x7fffffffff;
-#elif defined (__LP64__)
- static constexpr uintptr_t kMaxTargetAddr = 0x7fffffffffff;
+#if defined (__LP64__)
+ static constexpr uintptr_t kMaxTargetAddr = 0xffffffffffff;
#else
static constexpr uintptr_t kMaxTargetAddr = 0xffffffff;
#endif
diff --git a/libdl/libdl.arm.map b/libdl/libdl.arm.map
index 292bd9711..9fc9d2369 100644
--- a/libdl/libdl.arm.map
+++ b/libdl/libdl.arm.map
@@ -36,6 +36,7 @@ LIBC_N {
LIBC_OMR1 { # future
global:
+ __cfi_shadow_size; # future
__cfi_slowpath; # future
__cfi_slowpath_diag; # future
} LIBC_N;
diff --git a/libdl/libdl.arm64.map b/libdl/libdl.arm64.map
index 2fe2c7b94..bde6cab38 100644
--- a/libdl/libdl.arm64.map
+++ b/libdl/libdl.arm64.map
@@ -35,6 +35,7 @@ LIBC_N {
LIBC_OMR1 { # future
global:
+ __cfi_shadow_size; # future
__cfi_slowpath; # future
__cfi_slowpath_diag; # future
} LIBC_N;
diff --git a/libdl/libdl.map.txt b/libdl/libdl.map.txt
index 408d4dcc9..d1f4ab8d1 100644
--- a/libdl/libdl.map.txt
+++ b/libdl/libdl.map.txt
@@ -35,6 +35,7 @@ LIBC_N {
LIBC_OMR1 { # future
global:
+ __cfi_shadow_size; # future
__cfi_slowpath; # future
__cfi_slowpath_diag; # future
} LIBC_N;
diff --git a/libdl/libdl.mips.map b/libdl/libdl.mips.map
index 2fe2c7b94..bde6cab38 100644
--- a/libdl/libdl.mips.map
+++ b/libdl/libdl.mips.map
@@ -35,6 +35,7 @@ LIBC_N {
LIBC_OMR1 { # future
global:
+ __cfi_shadow_size; # future
__cfi_slowpath; # future
__cfi_slowpath_diag; # future
} LIBC_N;
diff --git a/libdl/libdl.mips64.map b/libdl/libdl.mips64.map
index 2fe2c7b94..bde6cab38 100644
--- a/libdl/libdl.mips64.map
+++ b/libdl/libdl.mips64.map
@@ -35,6 +35,7 @@ LIBC_N {
LIBC_OMR1 { # future
global:
+ __cfi_shadow_size; # future
__cfi_slowpath; # future
__cfi_slowpath_diag; # future
} LIBC_N;
diff --git a/libdl/libdl.x86.map b/libdl/libdl.x86.map
index 2fe2c7b94..bde6cab38 100644
--- a/libdl/libdl.x86.map
+++ b/libdl/libdl.x86.map
@@ -35,6 +35,7 @@ LIBC_N {
LIBC_OMR1 { # future
global:
+ __cfi_shadow_size; # future
__cfi_slowpath; # future
__cfi_slowpath_diag; # future
} LIBC_N;
diff --git a/libdl/libdl.x86_64.map b/libdl/libdl.x86_64.map
index 2fe2c7b94..bde6cab38 100644
--- a/libdl/libdl.x86_64.map
+++ b/libdl/libdl.x86_64.map
@@ -35,6 +35,7 @@ LIBC_N {
LIBC_OMR1 { # future
global:
+ __cfi_shadow_size; # future
__cfi_slowpath; # future
__cfi_slowpath_diag; # future
} LIBC_N;
diff --git a/libdl/libdl_cfi.cpp b/libdl/libdl_cfi.cpp
index 8458564a8..483364fcf 100644
--- a/libdl/libdl_cfi.cpp
+++ b/libdl/libdl_cfi.cpp
@@ -38,6 +38,11 @@ extern "C" uintptr_t* __cfi_init(uintptr_t shadow_base) {
return &shadow_base_storage.v;
}
+// Returns the size of the CFI shadow mapping, or 0 if CFI is not (yet) used in this process.
+extern "C" size_t __cfi_shadow_size() {
+ return shadow_base_storage.v != 0 ? CFIShadow::kShadowSize : 0;
+}
+
static uint16_t shadow_load(void* p) {
uintptr_t addr = reinterpret_cast<uintptr_t>(p);
uintptr_t ofs = CFIShadow::MemToShadowOffset(addr);
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 4397551d2..078b3d539 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -3533,6 +3533,9 @@ std::vector<android_namespace_t*> init_default_namespaces(const char* executable
g_default_namespace.set_permitted_paths(default_ns_config->permitted_paths());
namespaces[default_ns_config->name()] = &g_default_namespace;
+ if (default_ns_config->visible()) {
+ g_exported_namespaces[default_ns_config->name()] = &g_default_namespace;
+ }
// 2. Initialize other namespaces
diff --git a/tests/cfi_test.cpp b/tests/cfi_test.cpp
index 5e627a756..088dda603 100644
--- a/tests/cfi_test.cpp
+++ b/tests/cfi_test.cpp
@@ -26,6 +26,7 @@
extern "C" {
void __cfi_slowpath(uint64_t CallSiteTypeId, void* Ptr);
void __cfi_slowpath_diag(uint64_t CallSiteTypeId, void* Ptr, void* DiagData);
+size_t __cfi_shadow_size();
}
static void f() {}
@@ -36,6 +37,8 @@ TEST(cfi_test, basic) {
handle = dlopen("libcfi-test.so", RTLD_NOW | RTLD_LOCAL);
ASSERT_TRUE(handle != nullptr) << dlerror();
+ EXPECT_NE(0U, __cfi_shadow_size());
+
#define SYM(type, name) auto name = reinterpret_cast<type>(dlsym(handle, #name))
SYM(int (*)(), get_count);
SYM(uint64_t(*)(), get_last_type_id);