/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined4 parse_rtattr(void *param_1,int param_2,ushort *param_3,int param_4)

{
  uint uVar1;
  
  memset(param_1,0,(param_2 + 1) * 4)   //possible issue identified - semgrep
  if (param_4 < 4) {
LAB_0041db80:
    if (param_4 == 0) {
      return 0;
    }
    uVar1 = (uint)*param_3;
  }
  else {
    uVar1 = (uint)*param_3;
    if ((3 < uVar1) && ((int)uVar1 <= param_4)) {
      do {
        uVar1 = uVar1 + 3 & 0xfffffffc;
        param_4 = param_4 - uVar1;
        if ((int)(uint)param_3[1] <= param_2) {
          *(ushort **)((int)param_1 + (uint)param_3[1] * 4) = param_3;
        }
        param_3 = (ushort *)((int)param_3 + uVar1);
        if (param_4 < 4) goto LAB_0041db80;
        uVar1 = (uint)*param_3;
      } while ((3 < uVar1) && ((int)uVar1 <= param_4));
    }
  }
  fprintf(_stderr,"!!!Deficit %d, rta_len=%d\n",param_4,uVar1);
  return 0;
}