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;
}