fix: missing vdso lead to unoperating SoList hiding

This commit fixes the issue where the could would return when "__dl__ZL4vdso*" wasn't found, leaving traces in SoList.
This commit is contained in:
ThePedroo
2025-04-25 02:03:58 -03:00
parent a4c9794de0
commit 2f4f5af206

View File

@@ -93,7 +93,7 @@ static bool solist_init() {
See #63 for more information.
*/
solist = (SoInfo *)getSymbValueByPrefix(linker, "__dl__ZL6solist");
if (solist == NULL) {
if ((void *)solist == NULL) {
LOGE("Failed to find solist __dl__ZL6solist*");
ElfImg_destroy(linker);
@@ -101,8 +101,9 @@ static bool solist_init() {
return false;
}
LOGD("%p is solist", (void *)solist);
somain = (SoInfo *)getSymbValueByPrefix(linker, "__dl__ZL6somain");
LOGI("%p is somain", (void *)somain);
if (somain == NULL) {
LOGE("Failed to find somain __dl__ZL6somain*");
@@ -111,6 +112,8 @@ static bool solist_init() {
return false;
}
LOGD("%p is somain", (void *)somain);
sonext = (SoInfo **)getSymbAddressByPrefix(linker, "__dl__ZL6sonext");
if (sonext == NULL) {
LOGE("Failed to find sonext __dl__ZL6sonext*");
@@ -120,14 +123,10 @@ static bool solist_init() {
return false;
}
LOGD("%p is sonext", (void *)sonext);
SoInfo *vdso = (SoInfo *)getSymbValueByPrefix(linker, "__dl__ZL4vdso");
if (vdso == NULL) {
LOGE("Failed to find vsdo __dl__ZL4vdso*");
ElfImg_destroy(linker);
return false;
}
if (vdso != NULL) LOGD("%p is vdso", (void *)vdso);
get_realpath_sym = (const char *(*)(SoInfo *))getSymbAddress(linker, "__dl__ZNK6soinfo12get_realpathEv");
if (get_realpath_sym == NULL) {
@@ -138,6 +137,8 @@ static bool solist_init() {
return false;
}
LOGD("%p is get_realpath", (void *)get_realpath_sym);
soinfo_free = (void (*)(SoInfo *))getSymbAddressByPrefix(linker, "__dl__ZL11soinfo_freeP6soinfo");
if (soinfo_free == NULL) {
LOGE("Failed to find soinfo_free __dl__ZL11soinfo_freeP6soinfo*");
@@ -147,6 +148,8 @@ static bool solist_init() {
return false;
}
LOGD("%p is soinfo_free", (void *)soinfo_free);
g_module_load_counter = (uint64_t *)getSymbAddress(linker, "__dl__ZL21g_module_load_counter");
if (g_module_load_counter != NULL) LOGD("found symbol g_module_load_counter");