int * FUN_00409488(uint param_1,int *param_2,undefined4 param_3,undefined4 param_4,
                  undefined4 param_5)

{
  int *piVar1;
  undefined4 *__ptr;
  int iVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  undefined4 *puVar6;
  
  piVar1 = (int *)*param_2;
  if (piVar1 != (int *)0x0) {
    iVar2 = 0;
    do {
      piVar1 = (int *)*piVar1;
      iVar2 = iVar2 + 1;
    } while (piVar1 != (int *)0x0);
    __ptr = (undefined4 *)malloc(iVar2 * 0x10)   //possible issue identified - semgrep
    if (__ptr == (undefined4 *)0x0) {
      uVar3 = dhcp6optstr(param_1);
      dprintf(3,"dhcp6_set_addr","memory allocation failed for %s options",uVar3);
      piVar1 = (int *)0xffffffff;
    }
    else {
      puVar6 = __ptr;
      for (param_2 = (int *)*param_2; param_2 != (int *)0x0; param_2 = (int *)*param_2) {
        uVar5 = param_2[6];
        uVar3 = param_2[4];
        uVar4 = param_2[5];
        *puVar6 = param_2[3];
        puVar6[1] = uVar3;
        puVar6[2] = uVar4;
        puVar6[3] = uVar5;
        puVar6 = puVar6 + 4;
      }
      iVar2 = FUN_0040874c(param_1 & 0xffff,iVar2 * 0x10 & 0xfff0,__ptr,param_3,param_4,param_5);
      if (iVar2 == 0) {
        free(__ptr);
        piVar1 = (int *)0x0;
      }
      else {
        free(__ptr);
        piVar1 = (int *)0xffffffff;
      }
    }
  }
  return piVar1;
}