char * WPA_ExtractSuiteFromRSNIE(char *param_1,int param_2,char param_3,char *param_4)
{
char cVar1;
char cVar2;
ushort uVar3;
int iVar4;
char *pcVar5;
uint uVar6;
uint uVar7;
uint uVar8;
uint uVar9;
ushort local_20 [6];
*param_4 = '\0';
if (((int)(param_2 - 2U) < 1) || (uVar8 = (uint)(byte)param_1[1], uVar8 != param_2 - 2U)) {
printk("ERROR!!! ");
pcVar5 = "%s : The length is invalid\n";
}
else {
cVar1 = *param_1;
if (cVar1 == -0x23) {
if (uVar8 < 0x10) {
if (RTDebugLevel == 0) {
*param_4 = '\0';
return (char *)0x0;
}
pcVar5 = "%s : The length is too short for WPA\n";
goto LAB_0003fce0;
}
cVar2 = (char)*(ushort *)(param_1 + 0xc) //possible issue identified - semgrep
uVar9 = (uint)*(ushort *)(param_1 + 0xc);
iVar4 = uVar9 + 3;
uVar6 = iVar4 * 4;
if (uVar8 < uVar6) {
if (RTDebugLevel == 0) {
*param_4 = '\0';
return (char *)0x0;
}
pcVar5 = "%s : The expected lenght(%d) exceed the remaining length(%d) for WPA-RSN \n";
goto LAB_0003ffbc;
}
if (param_3 == '\0') {
*param_4 = '\x01';
return param_1 + 8;
}
uVar7 = uVar6;
if (param_3 == '\x01') {
if (RTDebugLevel < 3) {
*param_4 = cVar2;
}
else {
printk("%s : The count of pairwise cipher is %d\n","WPA_ExtractSuiteFromRSNIE",uVar9);
*param_4 = cVar2;
}
return param_1 + 0xe;
}
}
else {
if (cVar1 != '0') {
if (RTDebugLevel == 0) {
*param_4 = '\0';
return (char *)0x0;
}
printk("%s : Unknown IE (%d)\n","WPA_ExtractSuiteFromRSNIE",cVar1);
*param_4 = '\0';
return (char *)0x0;
}
if (uVar8 < 0xc) {
if (RTDebugLevel == 0) {
*param_4 = '\0';
return (char *)0x0;
}
pcVar5 = "%s : The length is too short for WPA2\n";
goto LAB_0003fce0;
}
cVar2 = (char)*(ushort *)(param_1 + 8) //possible issue identified - semgrep
uVar9 = (uint)*(ushort *)(param_1 + 8);
iVar4 = uVar9 + 2;
uVar6 = iVar4 * 4;
if (uVar8 < uVar6) {
if (RTDebugLevel == 0) {
*param_4 = '\0';
return (char *)0x0;
}
pcVar5 = "%s : The expected lenght(%d) exceed the remaining length(%d) for WPA2-RSN \n";
goto LAB_0003ffbc;
}
if (param_3 == '\0') {
*param_4 = '\x01';
return param_1 + 4;
}
uVar7 = uVar6;
if (param_3 == '\x01') {
if (RTDebugLevel < 3) {
*param_4 = cVar2;
}
else {
printk("%s : The count of pairwise cipher is %d\n","WPA_ExtractSuiteFromRSNIE",uVar9);
*param_4 = cVar2;
}
return param_1 + 10;
}
}
uVar8 = uVar8 + iVar4 * -4;
if (5 < uVar8) {
uVar3 = *(ushort *)(param_1 + uVar7 + 2);
uVar6 = (uint)uVar3 * 4 + 2;
if ((int)uVar8 < (int)uVar6) {
if (RTDebugLevel == 0) {
*param_4 = '\0';
return (char *)0x0;
}
pcVar5 = "%s : The expected lenght(%d) exceed the remaining length(%d) for AKM \n";
LAB_0003ffbc:
printk(pcVar5,"WPA_ExtractSuiteFromRSNIE",uVar6,uVar8);
*param_4 = '\0';
return (char *)0x0;
}
if (param_3 == '\x02') {
if (RTDebugLevel < 3) {
*param_4 = (char)uVar3;
}
else {
printk("%s : The count of AKM is %d\n","WPA_ExtractSuiteFromRSNIE",(uint)uVar3);
*param_4 = (char)uVar3;
}
return param_1 + uVar7 + 4;
}
if (cVar1 == -0x23) {
if (RTDebugLevel < 3) {
*param_4 = '\0';
return (char *)0x0;
}
pcVar5 = "%s : The remaining shall be ignored in WPA mode\n";
}
else if (uVar8 - uVar6 < 2) {
if (RTDebugLevel < 3) {
*param_4 = '\0';
return (char *)0x0;
}
pcVar5 = "%s : The peer RSNIE doesn\'t include RSN-Cap\n";
}
else {
param_1 = param_1 + uVar6 + uVar7 + 2;
if (param_3 == '\x03') {
if (2 < RTDebugLevel) {
printk("%s : Extract RSN Capabilities\n","WPA_ExtractSuiteFromRSNIE");
}
*param_4 = '\x01';
return param_1;
}
uVar8 = (uVar8 - uVar6) - 2;
if (1 < uVar8) {
memmove(local_20,param_1 + 2,2) //possible issue identified - semgrep
pcVar5 = (char *)0x0;
if (local_20[0] != 0) {
uVar6 = (uint)local_20[0] * 0x10 + 2;
pcVar5 = param_1 + 4;
if ((int)uVar8 < (int)uVar6) {
if (RTDebugLevel == 0) {
*param_4 = '\0';
return (char *)0x0;
}
pcVar5 =
"%s : The expected lenght(%d) exceed the remaining length(%d) in PMKID-field \n";
goto LAB_0003ffbc;
}
}
if (param_3 != '\x04') {
*param_4 = '\0';
return (char *)0x0;
}
*param_4 = (char)local_20[0];
return pcVar5;
}
if (RTDebugLevel < 3) {
*param_4 = '\0';
return (char *)0x0;
}
pcVar5 = "%s : The peer RSNIE doesn\'t include PMKID list Count\n";
}
LAB_0003fce0:
printk(pcVar5,"WPA_ExtractSuiteFromRSNIE");
*param_4 = '\0';
return (char *)0x0;
}
printk("ERROR!!! ");
pcVar5 = "%s : The length of AKM of RSN is too short\n";
}
printk(pcVar5,"WPA_ExtractSuiteFromRSNIE");
*param_4 = '\0';
return (char *)0x0;
}