undefined4
update_address(undefined4 param_1,uint *param_2,undefined4 param_3,undefined4 *param_4,
undefined4 param_5)
{
time_t tVar1;
undefined4 uVar2;
int iVar3;
undefined4 *puVar4;
uint uVar5;
undefined4 *puVar6;
uint uVar7;
uint uVar8;
undefined4 *puVar9;
char *pcVar10;
int local_20 [2];
puVar4 = (undefined4 *)*param_4;
if ((param_2[1] != 0xffffffff) && ((*param_2 == 0xffffffff || (param_2[1] < *param_2)))) {
uVar2 = in6addr2str(param_2 + 2,0);
dprintf(6,"update_address","invalid address %s: pltime (%lu) is larger than vltime (%lu)",uVar2,
*param_2,param_2[1]);
return 0xffffffff;
}
if (puVar4 == (undefined4 *)0x0) {
puVar4 = (undefined4 *)malloc(0x2c) //possible issue identified - semgrep
if (puVar4 == (undefined4 *)0x0) goto LAB_0041c444;
*puVar4 = param_1;
puVar4[1] = param_5;
puVar4[2] = &LAB_0041bd10;
puVar4[3] = FUN_0041bd1c;
puVar4[8] = FUN_0041c550;
puVar4[4] = &LAB_0041c5fc;
puVar4[10] = puVar4 + 9;
*param_4 = puVar4;
puVar4[7] = &LAB_0041c5fc;
puVar4[6] = &LAB_0041c5fc;
puVar4[5] = &LAB_0041c5fc;
puVar4[9] = 0;
}
puVar9 = (undefined4 *)puVar4[9];
if (puVar9 != (undefined4 *)0x0) {
do {
if ((((param_2[2] == puVar9[4]) && (puVar9[5] == param_2[3])) && (puVar9[6] == param_2[4])) &&
(puVar9[7] == param_2[5])) {
tVar1 = time((time_t *)0x0);
uVar5 = *param_2;
uVar7 = param_2[1];
puVar9[8] = tVar1;
puVar9[2] = uVar5;
puVar9[3] = uVar7;
puVar9[0xb] = param_3;
pcVar10 = "update";
goto LAB_0041c114;
}
puVar9 = (undefined4 *)*puVar9;
} while (puVar9 != (undefined4 *)0x0);
}
puVar9 = (undefined4 *)malloc(0x30) //possible issue identified - semgrep
if (puVar9 != (undefined4 *)0x0) {
*puVar9 = 0;
puVar9[1] = 0;
puVar9[4] = 0;
puVar9[5] = 0;
puVar9[6] = 0;
puVar9[7] = 0;
puVar9[10] = 0;
puVar9[2] = 0;
puVar9[3] = 0;
puVar9[8] = 0;
puVar9[9] = 0;
puVar9[0xb] = 0;
uVar5 = param_2[2];
uVar7 = param_2[3];
uVar8 = param_2[5];
puVar9[6] = param_2[4];
puVar9[4] = uVar5;
puVar9[5] = uVar7;
puVar9[7] = uVar8;
puVar9[1] = puVar4[10];
puVar6 = (undefined4 *)puVar4[10];
*puVar9 = 0;
puVar4[10] = puVar9;
*puVar6 = puVar9;
puVar9[10] = puVar4;
tVar1 = time((time_t *)0x0);
uVar5 = *param_2;
uVar7 = param_2[1];
puVar9[8] = tVar1;
puVar9[2] = uVar5;
puVar9[3] = uVar7;
puVar9[0xb] = param_3;
pcVar10 = "create";
LAB_0041c114:
uVar2 = in6addr2str(param_2 + 2,0);
dprintf(7,"update_address","%s an address %s pltime=%lu, vltime=%lu",pcVar10,uVar2,*param_2,
param_2[1]);
if (puVar9[3] != 0) {
iVar3 = FUN_0041bde0(0,puVar9);
if ((iVar3 < 0) && (iVar3 != -0x11)) {
return 0xffffffff;
}
local_20[0] = puVar9[3];
if (local_20[0] != 0) {
if (local_20[0] != -1) {
iVar3 = puVar9[9];
if (iVar3 == 0) {
iVar3 = dhcp6_add_timer(&LAB_0041c498,puVar9);
puVar9[9] = iVar3;
if (iVar3 == 0) {
dprintf(5,"update_address","failed to add stateful addr timer");
FUN_0041bf18(puVar9);
return 0xffffffff;
}
local_20[0] = puVar9[3];
}
local_20[1] = 0;
dhcp6_set_timer(local_20,iVar3);
return 0;
}
if (puVar9[9] == 0) {
return 0;
}
dhcp6_remove_timer(puVar9 + 9);
return 0;
}
}
iVar3 = FUN_0041bf18(puVar9);
if (iVar3 < 0) {
return 0xffffffff;
}
return 0;
}
LAB_0041c444:
dprintf(5,"update_address","memory allocation failed");
return 0xffffffff;
}