undefined4
PeerBeaconAndProbeRspSanity
          (int param_1,int param_2,uint param_3,undefined4 param_4,void *param_5,void *param_6,
          void *param_7,byte *param_8,undefined1 *param_9,void *param_10,byte *param_11,
          byte *param_12,void *param_13,undefined1 *param_14,undefined2 *param_15,ushort *param_16,
          byte *param_17,undefined1 *param_18,undefined1 *param_19,undefined1 *param_20,
          undefined1 *param_21,void *param_22,byte *param_23,void *param_24,byte *param_25,
          byte *param_26,byte *param_27,undefined1 *param_28,undefined1 *param_29,
          undefined1 *param_30,uint *param_31,byte *param_32,void *param_33,undefined2 *param_34,
          byte *param_35,void *param_36,byte *param_37,ushort *param_38,int param_39)

{
  ushort uVar1;
  byte bVar2;
  int iVar3;
  code *pcVar4;
  uint uVar5;
  undefined4 uVar6;
  undefined2 *__dest;
  char *pcVar7;
  uint uVar8;
  size_t __n;
  byte *pbVar9;
  byte *__src;
  uint uVar10;
  uint uVar11;
  uint local_38 [2];
  int local_30;
  
  local_38[0] = 0;
  os_alloc_mem(0,local_38,0x200);
  *param_15 = 0;
  *param_17 = 0;
  *param_18 = 0;
  *param_19 = 0;
  *param_20 = 0;
  *param_21 = 0;
  *param_25 = 0;
  *param_26 = 0;
  *param_27 = 0xff;
  *param_38 = 0;
  *param_32 = 0;
  *param_35 = 0;
  memset(param_34,0,1)   //possible issue identified - semgrep
  *param_31 = 0;
  *param_12 = 0;
  *param_37 = 0xff;
  *param_14 = 0;
  *param_29 = 0;
  *param_28 = 0;
  *param_30 = 0;
  memcpy(param_5,(void *)(param_2 + 10),6)   //possible issue identified - semgrep
  memcpy(param_6,(void *)(param_2 + 0x10),6)   //possible issue identified - semgrep
  memmove(param_13,(void *)(param_2 + 0x18),8)   //possible issue identified - semgrep
  memmove(param_10,(void *)(param_2 + 0x20),2)   //possible issue identified - semgrep
  memmove(param_16,(void *)(param_2 + 0x22),2)   //possible issue identified - semgrep
  if ((*param_16 & 1) == 0) {
    *param_9 = 0;
  }
  else {
    *param_9 = 1;
  }
  __src = (byte *)(param_2 + 0x24);
  uVar10 = 0;
  local_30 = 0x24;
  uVar11 = 0;
  do {
    uVar8 = (uint)__src[1];
    if (param_3 < uVar8 + 2 + local_30) {
LAB_000335c4:
      if ((0xe < *(byte *)(param_1 + 0x169ec)) && ((uVar10 & 4) == 0)) {
        uVar10 = uVar10 | 4;
        *param_11 = *(byte *)(param_1 + 0x169ec);
      }
LAB_000335f8:
      if (local_38[0] != 0) {
        os_free_mem(0);
      }
      uVar6 = 1;
      if ((uVar10 != 7) && (uVar6 = 0, 4 < RTDebugLevel)) {
        pcVar7 = "PeerBeaconAndProbeRspSanity - missing field, Sanity=0x%02x\n";
        pcVar4 = printk;
LAB_00033640:
        (*pcVar4)(pcVar7,uVar10);
LAB_00033648:
        uVar6 = 0;
      }
      return uVar6;
    }
    uVar5 = uVar8 + 2 + (uint)*param_38;
    if (0x3ff < uVar5) {
      if (1 < RTDebugLevel) {
        printk("PeerBeaconAndProbeRspSanity - Variable IEs out of resource [len(=%d) > MAX_VIE_LEN(=%d)]\n"
               ,uVar5,0x400);
      }
      goto LAB_000335c4;
    }
    bVar2 = *__src;
    if (bVar2 == 0x2a) {
      if (uVar8 == 1) {
        bVar2 = __src[2];
        pbVar9 = param_17;
LAB_0003345c:
        *pbVar9 = bVar2;
        goto LAB_00033588;
      }
      uVar8 = (uint)__src[1];
    }
    else if (bVar2 < 0x2b) {
      if (bVar2 == 3) {
        if (uVar8 == 1) {
          bVar2 = __src[2];
          uVar10 = uVar10 | 4;
          pbVar9 = param_11;
          goto LAB_00033440;
        }
        if (2 < RTDebugLevel) {
          pcVar7 = "PeerBeaconAndProbeRspSanity - wrong IE_DS_PARM (len=%d)\n";
LAB_00032f64:
          printk(pcVar7);
        }
        goto LAB_000335f8;
      }
      if (bVar2 < 4) {
        if (bVar2 == 1) {
          if (uVar8 < 0xd) {
            memmove(param_22,__src + 2,uVar8)   //possible issue identified - semgrep
            uVar10 = uVar10 | 2;
            bVar2 = __src[1];
            pbVar9 = param_23;
            goto LAB_00033440;
          }
          if (2 < RTDebugLevel) {
            pcVar7 = "PeerBeaconAndProbeRspSanity - wrong IE_SUPP_RATES (len=%d)\n";
            goto LAB_00032f64;
          }
          goto LAB_000335f8;
        }
        if (bVar2 < 2) {
          if ((uVar10 & 1) == 0) {
            if (uVar8 < 0x21) {
              memmove(param_7,__src + 2,uVar8)   //possible issue identified - semgrep
              uVar10 = uVar10 | 1;
              bVar2 = __src[1];
              pbVar9 = param_8;
              goto LAB_0003345c;
            }
            if (2 < RTDebugLevel) {
              pcVar7 = "PeerBeaconAndProbeRspSanity - wrong IE_SSID (len=%d)\n";
              goto LAB_00032f64;
            }
            goto LAB_000335f8;
          }
          uVar8 = (uint)__src[1];
        }
        else {
          if (2 < RTDebugLevel) {
            pcVar7 = "PeerBeaconAndProbeRspSanity(IE_FH_PARM) \n";
            goto LAB_00033058;
          }
          uVar8 = (uint)__src[1];
        }
      }
      else {
        if (bVar2 == 6) {
          if (uVar8 == 2) {
            __n = 2   //possible issue identified - semgrep
            __dest = param_15;
LAB_00033580:
            memmove(__dest,__src + 2,__n)   //possible issue identified - semgrep
            goto LAB_00033588;
          }
          if (2 < RTDebugLevel) {
            pcVar7 = "PeerBeaconAndProbeRspSanity - wrong IE_IBSS_PARM\n";
LAB_0003315c:
            printk(pcVar7);
          }
LAB_00033170:
          if (local_38[0] == 0) goto LAB_00033648;
          pcVar7 = (char *)0x0;
          pcVar4 = os_free_mem;
          uVar10 = local_38[0];
          goto LAB_00033640;
        }
        if (bVar2 < 7) {
          if (bVar2 == 4) {
            if (uVar8 == 6) {
              *param_14 = 1;
              param_14[1] = __src[2];
              param_14[2] = __src[3];
              uVar8 = (uint)__src[5] * 0x100 + (uint)__src[4] & 0xffff;
              param_14[4] = (char)(uVar8 >> 8);
              param_14[3] = (char)uVar8;
              uVar8 = (uint)__src[7] * 0x100 + (uint)__src[6] & 0xffff;
              param_14[6] = (char)(uVar8 >> 8);
              param_14[5] = (char)uVar8;
              goto LAB_00033588;
            }
            if (2 < RTDebugLevel) {
              pcVar7 = "PeerBeaconAndProbeRspSanity - wrong IE_CF_PARM\n";
              goto LAB_0003315c;
            }
            goto LAB_00033170;
          }
          uVar8 = (uint)__src[1];
        }
        else if (bVar2 == 0xb) {
          if (uVar8 == 5) {
            *param_29 = 1;
            *(ushort *)(param_29 + 2) = (ushort)__src[3] * 0x100 + (ushort)__src[2];
            param_29[4] = __src[4];
            *(ushort *)(param_29 + 6) = (ushort)__src[6] * 0x100 + (ushort)__src[5];
            uVar1 = *param_38;
            bVar2 = __src[1];
            goto LAB_0003354c;
          }
          uVar8 = (uint)__src[1];
        }
        else if (bVar2 == 0x25) {
          if (uVar8 == 3) {
            bVar2 = __src[3];
            pbVar9 = param_12;
            goto LAB_0003345c;
          }
          uVar8 = (uint)__src[1];
        }
        else {
          uVar8 = (uint)__src[1];
        }
      }
    }
    else if (bVar2 == 0x3e) {
      if (uVar8 == 1) {
        bVar2 = __src[2];
        pbVar9 = param_37;
        goto LAB_00033440;
      }
      if (RTDebugLevel < 2) {
        uVar8 = (uint)__src[1];
      }
      else {
        pcVar7 = "PeerBeaconAndProbeRspSanity - wrong IE_SECONDARY_CH_OFFSET. \n";
LAB_00033058:
        printk(pcVar7);
        uVar8 = (uint)__src[1];
      }
    }
    else if (bVar2 < 0x3f) {
      if (bVar2 == 0x30) {
        iVar3 = memcmp(__src + 4,&RSN_OUI,3);
        if (iVar3 == 0) {
          uVar1 = *param_38;
LAB_000334d0:
          bVar2 = __src[1];
LAB_0003354c:
          memmove((void *)(param_39 + (uint)uVar1),__src,bVar2 + 2)   //possible issue identified - semgrep
          *param_38 = __src[1] + 2 + *param_38;
          goto LAB_00033588;
        }
        uVar8 = (uint)__src[1];
      }
      else if (bVar2 < 0x31) {
        if (bVar2 == 0x2d) {
          if (0x19 < uVar8) {
            memmove(param_33,__src + 2,0x1a)   //possible issue identified - semgrep
            bVar2 = 0x1a;
            pbVar9 = param_32;
            goto LAB_0003345c;
          }
          if (RTDebugLevel < 2) {
            uVar8 = (uint)__src[1];
          }
          else {
            printk("PeerBeaconAndProbeRspSanity - wrong IE_HT_CAP. pEid->Len = %d\n");
            uVar8 = (uint)__src[1];
          }
        }
        else {
          uVar8 = (uint)__src[1];
        }
      }
      else if (bVar2 == 0x32) {
        if (uVar8 < 0xd) {
          memmove(param_24,__src + 2,uVar8)   //possible issue identified - semgrep
          bVar2 = __src[1];
          pbVar9 = param_25;
LAB_00033440:
          *pbVar9 = bVar2;
          goto LAB_00033588;
        }
        uVar8 = (uint)__src[1];
      }
      else if (bVar2 == 0x3d) {
        if (0x15 < uVar8) {
          memmove(param_36,__src + 2,0x16)   //possible issue identified - semgrep
          bVar2 = 0x16;
          pbVar9 = param_35;
          goto LAB_00033440;
        }
        if (1 < RTDebugLevel) {
          pcVar7 = "PeerBeaconAndProbeRspSanity - wrong IE_ADD_HT. \n";
          goto LAB_00033058;
        }
        uVar8 = (uint)__src[1];
      }
      else {
        uVar8 = (uint)__src[1];
      }
    }
    else if (bVar2 == 0x85) {
      if (0x1b < uVar8) {
        bVar2 = __src[10];
        pbVar9 = param_26;
        goto LAB_00033440;
      }
      uVar8 = (uint)__src[1];
    }
    else if (bVar2 < 0x86) {
      if (bVar2 == 0x7f) {
        if (uVar8 != 0) {
          __n = 1   //possible issue identified - semgrep
          __dest = param_34;
          goto LAB_00033580;
        }
        uVar8 = (uint)__src[1];
      }
      else {
        uVar8 = (uint)__src[1];
      }
    }
    else if (bVar2 == 0x96) {
      if (uVar8 == 6) {
        iVar3 = memcmp(__src + 2,&CISCO_OUI,3);
        if (iVar3 == 0) {
          bVar2 = __src[6];
          pbVar9 = param_27;
          goto LAB_0003345c;
        }
        uVar8 = (uint)__src[1];
      }
      else {
        uVar8 = (uint)__src[1];
      }
    }
    else if (bVar2 == 0xdd) {
      pbVar9 = __src + 2;
      iVar3 = memcmp(pbVar9,&RALINK_OUI,3);
      if ((iVar3 == 0) && (__src[1] == 7)) {
        if (__src[5] == 0) {
          *param_31 = 0xf0000000;
        }
        else {
          *param_31 = (uint)__src[5];
        }
        goto LAB_00033588;
      }
      iVar3 = memcmp(pbVar9,&WPA_OUI,4);
      if (iVar3 == 0) {
        uVar1 = *param_38;
        goto LAB_000334d0;
      }
      iVar3 = memcmp(pbVar9,&WME_PARM_ELEM,6);
      if ((iVar3 == 0) && (__src[1] == 0x18)) {
        *param_28 = 1;
        param_28[2] = 0;
        param_28[3] = 0;
        param_28[4] = 0;
        pbVar9 = __src + 10;
        param_28[6] = __src[8] & 0xf;
        iVar3 = 0;
        param_28[5] = __src[8] >> 7;
        do {
          iVar3 = iVar3 + 1;
          uVar8 = ((uint)*pbVar9 << 0x19) >> 0x1e;
          param_28[uVar8 + 0x1c] = (byte)(((uint)*pbVar9 << 0x1b) >> 0x1f);
          param_28[uVar8 + 7] = *pbVar9 & 0xf;
          param_28[uVar8 + 0xb] = pbVar9[1] & 0xf;
          param_28[uVar8 + 0xf] = pbVar9[1] >> 4;
          *(ushort *)(param_28 + (uVar8 + 8) * 2 + 4) =
               (ushort)pbVar9[3] * 0x100 + (ushort)pbVar9[2];
          pbVar9 = pbVar9 + 4;
        } while (iVar3 != 4);
        uVar8 = (uint)__src[1];
      }
      else {
        iVar3 = memcmp(pbVar9,&WME_INFO_ELEM,6);
        if ((iVar3 == 0) && (__src[1] == 7)) {
          *param_28 = 1;
          param_28[2] = 0;
          param_28[3] = 0;
          param_28[4] = 0;
          param_28[6] = __src[8] & 0xf;
          param_28[5] = __src[8] >> 7;
          *(undefined2 *)(param_28 + 0x18) = 0x60;
          param_28[0x12] = 5;
          param_28[8] = 7;
          param_28[0xc] = 4;
          param_28[0xd] = 3;
          param_28[0x11] = 6;
          param_28[0xe] = 2;
          *(undefined2 *)(param_28 + 0x1a) = 0x30;
          param_28[0x1c] = 0;
          param_28[7] = 3;
          param_28[0xb] = 4;
          param_28[0xf] = 6;
          *(undefined2 *)(param_28 + 0x14) = 0;
          param_28[0x1d] = 0;
          param_28[0x10] = 6;
          *(undefined2 *)(param_28 + 0x16) = 0;
          param_28[0x1e] = 0;
          param_28[9] = 2;
          param_28[0x1f] = 0;
          param_28[10] = 2;
        }
        else {
          iVar3 = memcmp(pbVar9,&WPS_OUI,4);
          if (iVar3 != 0) {
            uVar8 = (uint)__src[1];
            goto LAB_0003358c;
          }
          if ((0x1ff < uVar11) && (RTDebugLevel != 0)) {
            printk("%s: PeerWscIeLen = %d (>= 512)\n","PeerBeaconAndProbeRspSanity",uVar11);
          }
          if (local_38[0] != 0) {
            if (0x1ff < uVar11) {
              uVar8 = (uint)__src[1];
              goto LAB_0003358c;
            }
            memmove((void *)(local_38[0] + uVar11),__src + 6,__src[1] - 4)   //possible issue identified - semgrep
            uVar11 = uVar11 + (__src[1] - 4);
          }
        }
LAB_00033588:
        uVar8 = (uint)__src[1];
      }
    }
    else {
      uVar8 = (uint)__src[1];
    }
LAB_0003358c:
    local_30 = local_30 + uVar8 + 2;
    __src = __src + uVar8 + 2;
  } while( true );
}