/* WARNING: Could not reconcile some variable overlaps */
/* adbd_main(int) */
undefined8 adbd_main(int param_1)
{
undefined **ppuVar1;
ulong uVar2;
undefined4 uVar3;
long lVar4;
uint uVar5;
int iVar6;
int iVar7;
char *pcVar8;
long lVar9;
undefined8 *puVar10;
undefined4 *puVar11;
basic_ostream *pbVar12;
int *piVar13;
long lVar14;
code *pcVar15;
ulong uVar16;
ulong local_118;
undefined8 uStack_110;
void *local_108;
basic_string local_100;
undefined7 uStack_ff;
undefined uStack_f8;
undefined7 uStack_f7;
undefined local_f0;
undefined4 uStack_ef;
undefined uStack_eb;
undefined2 uStack_ea;
ulong local_e0;
ulong uStack_d8;
undefined **local_d0;
code *pcStack_c8;
undefined ***local_b0;
basic_string local_a0;
undefined7 uStack_9f;
undefined uStack_98;
undefined7 uStack_97;
undefined local_90;
undefined4 uStack_8f;
undefined uStack_8b;
undefined2 uStack_8a;
undefined4 uStack_88;
undefined4 local_84;
undefined4 uStack_80;
undefined8 uStack_7c;
lVar4 = tpidr_el0;
lVar14 = *(long *)(lVar4 + 0x28);
__umask_chk(0);
signal(0xd,(__sighandler_t)0x1);
init_transport_registration();
adbd_cloexec_auth_socket();
adbd_auth_init();
pcVar8 = getenv("ADB_EXTERNAL_STORAGE");
if (pcVar8 == (char *)0x0) {
if (((adb_trace_mask & 1) != 0) &&
(pcVar8 = (char *)android::base::GetMinimumLogSeverity(), (int)pcVar8 < 2)) {
puVar11 = (undefined4 *)__errno();
uVar3 = *puVar11;
android::base::LogMessage::LogMessage
((LogMessage *)&local_a0,"system/core/adb/daemon/main.cpp",199,0,1,(char *)0x0,-1) ;
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_a0);
android::base::StringPrintf
("Warning: ADB_EXTERNAL_STORAGE is not set. Leaving EXTERNAL_STORAGE unchanged.\n" )
;
uVar2 = (ulong)((byte)local_e0 >> 1);
ppuVar1 = (undefined **)((ulong)&local_e0 | 1);
if ((local_e0 & 1) != 0) {
uVar2 = uStack_d8;
ppuVar1 = local_d0;
}
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>
(pbVar12,(char *)ppuVar1,uVar2);
if (((byte)local_e0 & 1) != 0) {
operator.delete(local_d0);
}
pcVar8 = (char *)android::base::LogMessage::~LogMessage((LogMessage *)&local_a0);
*puVar11 = uVar3;
}
}
else {
uVar5 = setenv("EXTERNAL_STORAGE",pcVar8,1);
pcVar8 = (char *)(ulong)uVar5;
}
lVar9 = minijail_new(pcVar8);
uStack_7c = 0xbc300000bc1;
uStack_80 = 0xbbe;
uStack_88 = 0x404;
local_84 = 0x3f7;
local_90 = 0xba;
uStack_8f = 0xb900000b;
uStack_8b = 0xb;
uStack_8a = 0;
uStack_98 = 0xec;
uStack_97 = 0xbbb000003;
local_a0 = (basic_string)0xf3;
uStack_9f = 0x3ef000003;
minijail_set_supplementary_gids(lVar9,0xb,&local_a0);
minijail_use_caps(lVar9,0xc0);
minijail_change_gid(lVar9,2000);
minijail_change_uid(lVar9,2000);
minijail_enter(lVar9);
local_e0 = cap_get_proc();
local_d0 = &PTR_debuggerd_fallback_handler_005570b0;
pcStack_c8 = cap_free;
local_b0 = &local_d0;
iVar6 = cap_clear_flag(local_e0,2);
if ((iVar6 == -1) && (iVar6 = android::base::GetMinimumLogSeverity(), iVar6 < 7)) {
piVar13 = (int *)__errno();
iVar6 = *piVar13;
android::base::LogMessage::LogMessage
((LogMessage *)&local_100,"system/core/adb/daemon/main.cpp",0x8b,0,6,(char *)0x0,iVa r6
);
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_100);
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>
(pbVar12,"cap_clear_flag(INHERITABLE) failed",0x22);
android::base::LogMessage::~LogMessage((LogMessage *)&local_100);
*piVar13 = iVar6;
}
iVar6 = cap_clear_flag(local_e0,0);
if ((iVar6 == -1) && (iVar6 = android::base::GetMinimumLogSeverity(), iVar6 < 7)) {
piVar13 = (int *)__errno();
iVar6 = *piVar13;
android::base::LogMessage::LogMessage
((LogMessage *)&local_100,"system/core/adb/daemon/main.cpp",0x8e,0,6,(char *)0x0,iVa r6
);
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_100);
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>
(pbVar12,"cap_clear_flag(PEMITTED) failed",0x1f);
android::base::LogMessage::~LogMessage((LogMessage *)&local_100);
*piVar13 = iVar6;
}
iVar6 = cap_clear_flag(local_e0,1);
if ((iVar6 == -1) && (iVar6 = android::base::GetMinimumLogSeverity(), iVar6 < 7)) {
piVar13 = (int *)__errno();
iVar6 = *piVar13;
android::base::LogMessage::LogMessage
((LogMessage *)&local_100,"system/core/adb/daemon/main.cpp",0x91,0,6,(char *)0x0,iVa r6
);
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_100);
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>
(pbVar12,"cap_clear_flag(PEMITTED) failed",0x1f);
android::base::LogMessage::~LogMessage((LogMessage *)&local_100);
*piVar13 = iVar6;
}
iVar6 = cap_set_proc(local_e0);
if ((iVar6 != 0) && (iVar6 = android::base::GetMinimumLogSeverity(), iVar6 < 7)) {
piVar13 = (int *)__errno();
iVar6 = *piVar13;
android::base::LogMessage::LogMessage
((LogMessage *)&local_100,"system/core/adb/daemon/main.cpp",0x94,0,6,(char *)0x0,iVa r6
);
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_100);
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>
(pbVar12,"cap_set_proc() failed",0x15);
android::base::LogMessage::~LogMessage((LogMessage *)&local_100);
*piVar13 = iVar6;
}
if (((adb_trace_mask & 1) != 0) && (iVar6 = android::base::GetMinimumLogSeverity(), iVar6 < 2)) {
puVar11 = (undefined4 *)__errno();
uVar3 = *puVar11;
android::base::LogMessage::LogMessage
((LogMessage *)&local_118,"system/core/adb/daemon/main.cpp",0x97,0,1,(char *)0x0,-1) ;
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_118);
android::base::StringPrintf("Local port disabled");
uVar2 = (ulong)((byte)local_100 >> 1);
pcVar8 = (char *)((ulong)&local_100 | 1);
if (((byte)local_100 & 1) != 0) {
uVar2 = CONCAT71(uStack_f7,uStack_f8);
pcVar8 = (char *)CONCAT26(uStack_ea,CONCAT15(uStack_eb,CONCAT41(uStack_ef,local_f0)));
}
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>(pbVar12,pcVar8,uVar2);
if (((byte)local_100 & 1) != 0) {
operator.delete((void *)CONCAT26(uStack_ea,CONCAT15(uStack_eb,CONCAT41(uStack_ef,local_f0)) ));
}
android::base::LogMessage::~LogMessage((LogMessage *)&local_118);
*puVar11 = uVar3;
}
uVar2 = local_e0;
local_e0 = 0;
if (uVar2 != 0) {
local_100 = SUB81(uVar2,0);
uStack_ff = (undefined7)(uVar2 >> 8);
if (local_b0 == (undefined ***)0x0) {
/* WARNING: Subroutine does not return */
abort();
}
(*(code *)(*local_b0)[6])(local_b0,&local_100);
}
if (&local_d0 == local_b0) {
pcVar15 = (code *)(*local_b0)[4];
LAB_00405120:
(*pcVar15)();
}
else if (local_b0 != (undefined ***)0x0) {
pcVar15 = (code *)(*local_b0)[5];
goto LAB_00405120;
}
if (lVar9 != 0) {
minijail_destroy(lVar9);
}
iVar6 = access("/dev/usb-ffs/adb/ep0",0);
if (iVar6 == 0) {
usb_init();
}
local_a0 = (basic_string)0x28;
uStack_8a = 0;
local_100 = (basic_string)0x0;
uStack_ff = 0;
uStack_f8 = 0;
uStack_f7 = 0;
uStack_8f = 0x74726f70;
uStack_97 = 0x7063742e626461;
local_90 = 0x2e;
uStack_9f = 0x65636976726573;
uStack_98 = 0x2e;
uStack_8b = 0;
local_f0 = 0;
uStack_ef = 0;
uStack_eb = 0;
uStack_ea = 0;
android::base::GetProperty(&local_a0,&local_100);
if (((byte)local_100 & 1) != 0) {
operator.delete((void *)CONCAT26(uStack_ea,CONCAT15(uStack_eb,CONCAT41(uStack_ef,local_f0)))) ;
}
if (((byte)local_a0 & 1) != 0) {
operator.delete((void *)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90)))) ;
}
uVar16 = (ulong)((byte)local_e0 >> 1);
uVar2 = uVar16;
if ((local_e0 & 1) != 0) {
uVar2 = uStack_d8;
}
if (uVar2 == 0) {
local_100 = (basic_string)0x28;
uStack_ea = 0;
local_118 = 0;
uStack_110 = 0;
uStack_ef = 0x74726f70;
uStack_f7 = 0x7063742e626461;
local_f0 = 0x2e;
uStack_ff = 0x74736973726570;
uStack_f8 = 0x2e;
uStack_eb = 0;
local_108 = (void *)0x0;
android::base::GetProperty(&local_100,(basic_string *)&local_118);
if ((local_e0 & 1) == 0) {
local_e0 = local_e0 & 0xffffffffffff0000;
}
else {
*(char *)local_d0 = '\0';
uStack_d8 = 0;
}
std::__1::basic_string<char,std::__1::char_traits<char>,std::__1::allocator<char>>::reserve
((basic_string<char,std::__1::char_traits<char>,std::__1::allocator<char>> *)&local_ e0
,0);
local_d0 = (undefined **)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90))) ;
uStack_d8 = CONCAT71(uStack_97,uStack_98);
local_e0 = CONCAT71(uStack_9f,local_a0);
local_a0 = (basic_string)0x0;
uStack_9f = 0;
uStack_98 = 0;
uStack_97 = 0;
local_90 = 0;
uStack_8f = 0;
uStack_8b = 0;
uStack_8a = 0;
if ((local_118 & 1) != 0) {
operator.delete(local_108);
}
if (((byte)local_100 & 1) != 0) {
operator.delete((void *)CONCAT26(uStack_ea,CONCAT15(uStack_eb,CONCAT41(uStack_ef,local_f0)) ));
}
uVar16 = (ulong)((byte)local_e0 >> 1);
}
if (((byte)local_e0 & 1) != 0) {
uVar16 = uStack_d8;
}
if (uVar16 == 0) {
puVar10 = (undefined8 *)operator.new(0x30);
local_f0 = SUB81(puVar10,0);
uStack_ef = (undefined4)((ulong)puVar10 >> 8);
uStack_eb = (undefined)((ulong)puVar10 >> 0x28);
uStack_ea = (undefined2)((ulong)puVar10 >> 0x30);
*(undefined *)(puVar10 + 4) = 0;
puVar10[1] = 0x6e2e726f646e6576;
*puVar10 = 0x2e74736973726570;
puVar10[3] = 0x74726f702e706374;
puVar10[2] = 0x2e6264612e616476;
local_118 = 0;
uStack_110 = 0;
uStack_f8 = 0x20;
uStack_f7 = 0;
local_100 = (basic_string)0x31;
uStack_ff = 0;
local_108 = (void *)0x0;
android::base::GetProperty(&local_100,(basic_string *)&local_118);
if ((local_e0 & 1) == 0) {
local_e0 = local_e0 & 0xffffffffffff0000;
}
else {
*(char *)local_d0 = '\0';
uStack_d8 = 0;
}
std::__1::basic_string<char,std::__1::char_traits<char>,std::__1::allocator<char>>::reserve
((basic_string<char,std::__1::char_traits<char>,std::__1::allocator<char>> *)&local_ e0
,0);
local_d0 = (undefined **)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90))) ;
uStack_d8 = CONCAT71(uStack_97,uStack_98);
local_e0 = CONCAT71(uStack_9f,local_a0);
local_a0 = (basic_string)0x0;
uStack_9f = 0;
uStack_98 = 0;
uStack_97 = 0;
local_90 = 0;
uStack_8f = 0;
uStack_8b = 0;
uStack_8a = 0;
if ((local_118 & 1) != 0) {
operator.delete(local_108);
}
if (((byte)local_100 & 1) != 0) {
operator.delete((void *)CONCAT26(uStack_ea,CONCAT15(uStack_eb,CONCAT41(uStack_ef,local_f0)) ));
}
}
ppuVar1 = (undefined **)((ulong)&local_e0 | 1);
if (((byte)local_e0 & 1) != 0) {
ppuVar1 = local_d0;
}
iVar7 = sscanf((char *)ppuVar1,"%d",&local_118);
if ((iVar7 == 1) && (0 < (int)local_118)) {
if (((adb_trace_mask & 1) != 0) && (iVar6 = android::base::GetMinimumLogSeverity(), iVar6 < 2) )
{
puVar11 = (undefined4 *)__errno();
uVar3 = *puVar11;
android::base::LogMessage::LogMessage
((LogMessage *)&local_100,"system/core/adb/daemon/main.cpp",0xe0,0,1,(char *)0x0,- 1)
;
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_100);
android::base::StringPrintf("using port=%d",local_118 & 0xffffffff);
uVar2 = (ulong)((byte)local_a0 >> 1);
pcVar8 = (char *)((ulong)&local_a0 | 1);
if (((byte)local_a0 & 1) != 0) {
uVar2 = CONCAT71(uStack_97,uStack_98);
pcVar8 = (char *)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90)));
}
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>(pbVar12,pcVar8,uVar2);
if (((byte)local_a0 & 1) != 0) {
operator.delete((void *)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90 )))
);
}
android::base::LogMessage::~LogMessage((LogMessage *)&local_100);
*puVar11 = uVar3;
}
local_init((int)local_118);
}
else {
if (iVar6 == 0) goto LAB_004053b0;
local_init(0x15b3);
local_118._0_4_ = 0x15b3;
}
setup_mdns((int)local_118);
LAB_004053b0:
if (((adb_trace_mask & 1) != 0) && (iVar6 = android::base::GetMinimumLogSeverity(), iVar6 < 2)) {
puVar11 = (undefined4 *)__errno();
uVar3 = *puVar11;
android::base::LogMessage::LogMessage
((LogMessage *)&local_100,"system/core/adb/daemon/main.cpp",0xe8,0,1,(char *)0x0,-1) ;
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_100);
android::base::StringPrintf("adbd_main(): pre init_jdwp()");
uVar2 = (ulong)((byte)local_a0 >> 1);
pcVar8 = (char *)((ulong)&local_a0 | 1);
if (((byte)local_a0 & 1) != 0) {
uVar2 = CONCAT71(uStack_97,uStack_98);
pcVar8 = (char *)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90)));
}
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>(pbVar12,pcVar8,uVar2);
if (((byte)local_a0 & 1) != 0) {
operator.delete((void *)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90)) ));
}
android::base::LogMessage::~LogMessage((LogMessage *)&local_100);
*puVar11 = uVar3;
}
init_jdwp();
if (((adb_trace_mask & 1) != 0) && (iVar6 = android::base::GetMinimumLogSeverity(), iVar6 < 2)) {
puVar11 = (undefined4 *)__errno();
uVar3 = *puVar11;
android::base::LogMessage::LogMessage
((LogMessage *)&local_100,"system/core/adb/daemon/main.cpp",0xea,0,1,(char *)0x0,-1) ;
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_100);
android::base::StringPrintf("adbd_main(): post init_jdwp()");
uVar2 = (ulong)((byte)local_a0 >> 1);
pcVar8 = (char *)((ulong)&local_a0 | 1);
if (((byte)local_a0 & 1) != 0) {
uVar2 = CONCAT71(uStack_97,uStack_98);
pcVar8 = (char *)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90)));
}
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>(pbVar12,pcVar8,uVar2);
if (((byte)local_a0 & 1) != 0) {
operator.delete((void *)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90)) ));
}
android::base::LogMessage::~LogMessage((LogMessage *)&local_100);
*puVar11 = uVar3;
}
if (((adb_trace_mask & 1) != 0) && (iVar6 = android::base::GetMinimumLogSeverity(), iVar6 < 2)) {
puVar11 = (undefined4 *)__errno();
uVar3 = *puVar11;
android::base::LogMessage::LogMessage
((LogMessage *)&local_100,"system/core/adb/daemon/main.cpp",0xec,0,1,(char *)0x0,-1) ;
pbVar12 = (basic_ostream *)ENGINE_get_RSA_method(&local_100);
android::base::StringPrintf("Event loop starting");
uVar2 = (ulong)((byte)local_a0 >> 1);
pcVar8 = (char *)((ulong)&local_a0 | 1);
if (((byte)local_a0 & 1) != 0) {
uVar2 = CONCAT71(uStack_97,uStack_98);
pcVar8 = (char *)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90)));
}
std::__1::__put_character_sequence<char,std::__1::char_traits<char>>(pbVar12,pcVar8,uVar2);
if (((byte)local_a0 & 1) != 0) {
operator.delete((void *)CONCAT26(uStack_8a,CONCAT15(uStack_8b,CONCAT41(uStack_8f,local_90)) ));
}
android::base::LogMessage::~LogMessage((LogMessage *)&local_100);
*puVar11 = uVar3;
}
fdevent_loop();
if ((local_e0 & 1) != 0) {
operator.delete(local_d0);
}
if (*(long *)(lVar4 + 0x28) != lVar14) {
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
return 0;
}