[-]
[+]
|
Changed |
_service:tar_git:libhybris.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,7 +2,7 @@
<service name="tar_git">
<param name="url">https://github.com/mer-hybris/libhybris.git</param>
<param name="branch">master</param>
- <param name="revision">57d692bccb65daaab959803f00d842451471ca7c</param>
+ <param name="revision">5a0019d067f010e341ef22f80b472e4c6fe5d972</param>
<param name="token"/>
<param name="debian">N</param>
<param name="dumb">N</param>
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.31.tar.bz2/libhybris/hybris/common/hooks.c
^
|
@@ -93,9 +93,9 @@
static hybris_hook_cb hook_callback = NULL;
#ifdef WANT_ARM_TRACING
-static void (*_android_linker_init)(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), void *(_create_wrapper)(const char*, void*, int)) = NULL;
+static void (*_android_linker_init)(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support, void *(_create_wrapper)(const char*, void*, int)) = NULL;
#else
-static void (*_android_linker_init)(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*)) = NULL;
+static void (*_android_linker_init)(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support) = NULL;
#endif
void *(*_android_dlopen)(const char* filename, int flag) = NULL;
@@ -3180,6 +3180,14 @@
static void __hybris_linker_init()
{
LOGD("Linker initialization");
+
+ int enable_linker_gdb_support = 0;
+ const char *env = getenv("HYBRIS_ENABLE_LINKER_DEBUG_MAP");
+ if (env != NULL) {
+ if (strcmp(env, "1") == 0) {
+ enable_linker_gdb_support = 1;
+ }
+ }
int sdk_version = get_android_sdk_version();
@@ -3207,7 +3215,11 @@
#endif
const char *linker_dir = LINKER_PLUGIN_DIR;
- const char *user_linker_dir = getenv("HYBRIS_LINKER_DIR");
+ /* getauxval to make sure users cannot load custom libraries into
+ * setuid processes */
+ const char *user_linker_dir = getauxval(AT_SECURE) ?
+ NULL :
+ getenv("HYBRIS_LINKER_DIR");
if (user_linker_dir)
linker_dir = user_linker_dir;
@@ -3241,9 +3253,9 @@
/* Now its time to setup the linker itself */
#ifdef WANT_ARM_TRACING
- _android_linker_init(sdk_version, __hybris_get_hooked_symbol, create_wrapper);
+ _android_linker_init(sdk_version, __hybris_get_hooked_symbol, enable_linker_gdb_support, create_wrapper);
#else
- _android_linker_init(sdk_version, __hybris_get_hooked_symbol);
+ _android_linker_init(sdk_version, __hybris_get_hooked_symbol, enable_linker_gdb_support);
#endif
if (_android_set_application_target_sdk_version) {
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.31.tar.bz2/libhybris/hybris/common/jb/linker.c
^
|
@@ -172,8 +172,12 @@
static pthread_mutex_t _r_debug_lock = PTHREAD_MUTEX_INITIALIZER;
+static int _linker_enable_gdb_support = 0;
+
static void insert_soinfo_into_debug_map(soinfo * info)
{
+ if (!_linker_enable_gdb_support) return;
+
struct link_map * map;
/* Copy the necessary fields into the debug structure.
@@ -232,6 +236,8 @@
static void remove_soinfo_from_debug_map(soinfo * info)
{
+ if (!_linker_enable_gdb_support) return;
+
struct link_map * map = &(info->linkmap);
if (r_debug_tail == map)
@@ -2375,10 +2381,11 @@
}
#ifdef WANT_ARM_TRACING
-void android_linker_init(int sdk_version, void *(get_hooked_symbol)(const char*, const char*), void *(create_wrapper)(const char*, void*, int)) {
+void android_linker_init(int sdk_version, void *(get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support, void *(create_wrapper)(const char*, void*, int)) {
#else
-void android_linker_init(int sdk_version, void *(get_hooked_symbol)(const char*, const char*)) {
+void android_linker_init(int sdk_version, void *(get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support) {
#endif
(void) sdk_version;
_get_hooked_symbol = get_hooked_symbol;
+ _linker_enable_gdb_support = enable_linker_gdb_support;
}
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.31.tar.bz2/libhybris/hybris/common/mm/linker.cpp
^
|
@@ -148,11 +148,15 @@
static void* (*_get_hooked_symbol)(const char *sym, const char *requester);
+static int _linker_enable_gdb_support = 0;
+
#ifdef WANT_ARM_TRACING
void *(*_create_wrapper)(const char *symbol, void *function, int wrapper_type);
#endif
static void insert_soinfo_into_debug_map(soinfo* info) {
+ if (!_linker_enable_gdb_support) return;
+
// Copy the necessary fields into the debug structure.
link_map* map = &(info->link_map_head);
map->l_addr = info->load_bias;
@@ -195,6 +199,8 @@
}
static void remove_soinfo_from_debug_map(soinfo* info) {
+ if (!_linker_enable_gdb_support) return;
+
link_map* map = &(info->link_map_head);
if (r_debug_head == map) {
@@ -3361,9 +3367,9 @@
}
#ifdef WANT_ARM_TRACING
-extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), void *(create_wrapper)(const char*, void*, int)) {
+extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support, void *(create_wrapper)(const char*, void*, int)) {
#else
-extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*)) {
+extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support) {
#endif
// Get a few environment variables.
const char* LD_DEBUG = getenv("HYBRIS_LD_DEBUG");
@@ -3388,6 +3394,7 @@
set_application_target_sdk_version(sdk_version);
_get_hooked_symbol = get_hooked_symbol;
+ _linker_enable_gdb_support = enable_linker_gdb_support;
#ifdef WANT_ARM_TRACING
_create_wrapper = create_wrapper;
#endif
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.31.tar.bz2/libhybris/hybris/common/n/linker.cpp
^
|
@@ -4684,9 +4684,9 @@
}
#ifdef WANT_ARM_TRACING
-extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), void *(create_wrapper)(const char*, void*, int)) {
+extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support, void *(create_wrapper)(const char*, void*, int)) {
#else
-extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*)) {
+extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support) {
#endif
// Get a few environment variables.
const char* LD_DEBUG = getenv("HYBRIS_LD_DEBUG");
@@ -4711,6 +4711,7 @@
set_application_target_sdk_version(sdk_version);
_get_hooked_symbol = get_hooked_symbol;
+ _linker_enable_gdb_support = enable_linker_gdb_support;
#ifdef WANT_ARM_TRACING
_create_wrapper = create_wrapper;
#endif
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.31.tar.bz2/libhybris/hybris/common/n/linker_gdb_support.cpp
^
|
@@ -33,7 +33,11 @@
static pthread_mutex_t g__r_debug_mutex = PTHREAD_MUTEX_INITIALIZER;
static link_map* r_debug_head = nullptr;
+int _linker_enable_gdb_support = 0;
+
void insert_link_map_into_debug_map(link_map* map) {
+ if (!_linker_enable_gdb_support) return;
+
// Stick the new library at the end of the list.
// gdb tends to care more about libc than it does
// about leaf libraries, and ordering it this way
@@ -46,16 +50,16 @@
if(r_debug_head == nullptr && _r_debug.r_map != nullptr) {
link_map *glibc_link_map = new link_map(*_r_debug.r_map);
r_debug_head = glibc_link_map;
-
+
while(glibc_link_map->l_next != nullptr) {
link_map *copy_next_link_map = new link_map(*glibc_link_map->l_next);
glibc_link_map->l_next = copy_next_link_map;
copy_next_link_map->l_prev = glibc_link_map;
-
+
glibc_link_map = copy_next_link_map;
}
}
-
+
if (r_debug_head != nullptr) {
r_debug_head->l_prev = map;
map->l_next = r_debug_head;
@@ -69,6 +73,8 @@
}
void remove_link_map_from_debug_map(link_map* map) {
+ if (!_linker_enable_gdb_support) return;
+
if (r_debug_head == map) {
r_debug_head = map->l_next;
}
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.31.tar.bz2/libhybris/hybris/common/n/linker_gdb_support.h
^
|
@@ -28,6 +28,7 @@
void notify_gdb_of_libraries();
extern struct r_debug _r_debug;
+extern int _linker_enable_gdb_support;
__END_DECLS
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.31.tar.bz2/libhybris/hybris/common/o/linker_gdb_support.cpp
^
|
@@ -45,7 +45,11 @@
static pthread_mutex_t g__r_debug_mutex = PTHREAD_MUTEX_INITIALIZER;
static link_map* r_debug_head = nullptr;
+int _linker_enable_gdb_support = 0;
+
void insert_link_map_into_debug_map(link_map* map) {
+ if (!_linker_enable_gdb_support) return;
+
// Stick the new library at the end of the list.
// gdb tends to care more about libc than it does
// about leaf libraries, and ordering it this way
@@ -58,16 +62,16 @@
if(r_debug_head == nullptr && _r_debug.r_map != nullptr) {
link_map *glibc_link_map = new link_map(*_r_debug.r_map);
r_debug_head = glibc_link_map;
-
+
while(glibc_link_map->l_next != nullptr) {
link_map *copy_next_link_map = new link_map(*glibc_link_map->l_next);
glibc_link_map->l_next = copy_next_link_map;
copy_next_link_map->l_prev = glibc_link_map;
-
+
glibc_link_map = copy_next_link_map;
}
}
-
+
if (r_debug_head != nullptr) {
r_debug_head->l_prev = map;
map->l_next = r_debug_head;
@@ -81,6 +85,8 @@
}
void remove_link_map_from_debug_map(link_map* map) {
+ if (!_linker_enable_gdb_support) return;
+
if (r_debug_head == map) {
r_debug_head = map->l_next;
}
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.31.tar.bz2/libhybris/hybris/common/o/linker_gdb_support.h
^
|
@@ -40,6 +40,7 @@
void notify_gdb_of_libraries();
extern struct r_debug _r_debug;
+extern int _linker_enable_gdb_support;
__END_DECLS
|
[-]
[+]
|
Changed |
_service:tar_git:libhybris-0.0.5.31.tar.bz2/libhybris/hybris/common/o/linker_main.cpp
^
|
@@ -499,9 +499,9 @@
void *(*_create_wrapper)(const char *symbol, void *function, int wrapper_type);
#ifdef WANT_ARM_TRACING
-extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), void *(create_wrapper)(const char*, void*, int)) {
+extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support, void *(create_wrapper)(const char*, void*, int)) {
#else
-extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*)) {
+extern "C" void android_linker_init(int sdk_version, void* (*get_hooked_symbol)(const char*, const char*), int enable_linker_gdb_support) {
#endif
// Get a few environment variables.
const char* LD_DEBUG = getenv("HYBRIS_LD_DEBUG");
@@ -526,6 +526,7 @@
set_application_target_sdk_version(sdk_version);
_get_hooked_symbol = get_hooked_symbol;
+ _linker_enable_gdb_support = enable_linker_gdb_support;
#ifdef WANT_ARM_TRACING
_create_wrapper = create_wrapper;
#endif
|