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