int rt28xx_ap_ioctl(undefined4 param_1,int param_2,int param_3)
{
char cVar1;
ushort uVar2;
int *piVar3;
int iVar4;
int iVar5;
code *pcVar6;
char *pcVar7;
uint uVar8;
uint uVar9;
char *pcVar10;
int iVar11;
undefined4 uVar12;
undefined2 uVar13;
size_t __n;
int unaff_gp;
undefined4 uVar14;
char *local_70;
uint local_6c;
ushort local_68;
undefined4 local_64;
undefined4 local_60;
uint local_5c;
uint local_58;
undefined4 local_54;
undefined4 local_50;
undefined4 local_4c;
undefined4 local_48;
undefined4 local_44;
int local_40;
ushort local_3c;
piVar3 = (int *)RtmpOsGetNetDevPriv();
if (piVar3 == (int *)0x0) {
return -0x7f;
}
local_6c = *(uint *)(param_2 + 0x10);
uVar2 = *(ushort *)(param_2 + 0x14);
local_4c = 0;
local_68 = uVar2;
local_64 = param_1;
local_60 = RtmpDevPrivFlagsGet(param_1);
local_5c = *(uint *)(param_2 + 0x10);
local_58 = 0x8be2;
local_50 = 0;
local_54 = param_1;
iVar4 = RTMP_AP_IoctlHandle(piVar3,0,0x20,0,&local_64,0);
uVar12 = local_50;
iVar11 = local_4c;
if (iVar4 != 0) {
LAB_00093154:
if (iVar11 != 0) {
if (iVar11 == 30000) {
return -0x16;
}
LAB_00093170:
if (iVar11 == 0x7531) {
return -0x7a;
}
if (iVar11 == 0x7532) {
return -0xe;
}
if (iVar11 == 0x7534) {
return -7;
}
if (iVar11 == 0x7535) {
return -0xc;
}
if (iVar11 == 0x7536) {
return -0xb;
}
if (iVar11 != 0x7537) {
return iVar11;
}
return -0x86;
}
goto LAB_000931cc;
}
if (param_3 == 0x8b01) {
if (2 < RTDebugLevel) {
printk("IOCTL::SIOCGIWNAME\n");
}
RTMP_COM_IoctlHandle(piVar3,0,0x5030,0,param_2 + 0x10,0);
return 0;
}
if (param_3 == 0x8be3) {
uVar12 = 7;
LAB_000930d8:
iVar11 = 0;
uVar14 = 0;
}
else {
if (0x8be3 < param_3) {
if (param_3 != 0x8bef) {
if (param_3 < 0x8bf0) {
if (param_3 != 0x8be8) {
if (param_3 < 0x8be9) {
if (param_3 == 0x8be5) {
uVar12 = 8;
}
else {
if (param_3 != 0x8be7) {
iVar11 = 0x7531;
goto LAB_00093170;
}
uVar12 = 6;
}
}
else if (param_3 == 0x8be9) {
uVar12 = 4;
}
else {
if (param_3 != 0x8bed) {
iVar11 = 0x7531;
goto LAB_00093170;
}
uVar12 = 3;
}
goto LAB_00093100;
}
uVar12 = 0xe;
pcVar6 = RTMP_COM_IoctlHandle;
iVar11 = param_2;
}
else {
if (param_3 == 0x8bf6) {
uVar12 = 5;
goto LAB_000930d8;
}
if (0x8bf6 < param_3) {
if (param_3 == 0x8bfd) {
uVar12 = 1;
}
else {
if (param_3 == 0x8bff) {
uVar12 = 0x11;
goto LAB_00093100;
}
if (param_3 != 0x8bfc) {
iVar11 = 0x7531;
goto LAB_00093170;
}
uVar12 = 0;
}
iVar11 = hapd_ioctl_param(uVar12,piVar3,param_2);
goto LAB_00093154;
}
if (param_3 == 0x8bf1) {
if ((((uint)*(ushort *)(param_2 + 0x14) + *(uint *)(param_2 + 0x10) |
*(uint *)(param_2 + 0x10) | (uint)*(ushort *)(param_2 + 0x14)) &
*(uint *)(unaff_gp + 0x18)) == 0) {
uVar12 = 0xc;
LAB_00093054:
uVar13 = 0;
uVar14 = 0;
goto LAB_0009305c;
}
goto LAB_00093210;
}
if (param_3 != 0x8bf3) {
iVar11 = 0x7531;
goto LAB_00093170;
}
uVar12 = 9;
LAB_00093100:
pcVar6 = RTMP_AP_IoctlHandle;
iVar11 = 0;
}
(*pcVar6)(piVar3,&local_6c,uVar12,0,iVar11,0);
iVar11 = 0;
goto LAB_000931cc;
}
uVar12 = 2;
goto LAB_000930d8;
}
if (param_3 != 0x8b15) {
if (param_3 < 0x8b16) {
if (param_3 == 0x8b07) {
local_44 = 2;
goto LAB_00092e88;
}
if (param_3 < 0x8b08) {
if (param_3 == 0x8927) {
if (2 < RTDebugLevel) {
printk("IOCTLIOCTLIOCTL::SIOCGIFHWADDR\n");
}
uVar12 = 0x22;
goto LAB_00093100;
}
if (param_3 != 0x8b05) {
iVar11 = 0x7531;
goto LAB_00093170;
}
RTMP_COM_IoctlHandle(piVar3,0,0x502f,0,&local_70,0);
*(undefined2 *)(param_2 + 0x14) = 0;
*(char **)(param_2 + 0x10) = local_70;
*(undefined1 *)(param_2 + 0x16) = 0;
}
else {
if (param_3 == 0x8b0b) {
local_70 = (char *)0x0;
os_alloc_mem(0,&local_70,0x238);
if (local_70 == (char *)0x0) {
if (RTDebugLevel == 0) {
iVar11 = 0;
goto LAB_000931cc;
}
pcVar10 = "%s: Allocate memory fail!!!\n";
pcVar6 = printk;
pcVar7 = "rt28xx_ap_ioctl";
}
else {
memset(local_70,0,0x238) //possible issue identified - semgrep
local_70[0x118] = '\x16';
local_70[0x119] = '\x0e';
local_70[0x2c] = 'd';
local_70[0x2d] = '\0';
local_70[0x2e] = '\0';
if (((local_6c + 0x238 | local_6c) & *(uint *)(unaff_gp + 0x18)) == 0) {
__copy_user(local_6c,local_70,0x238);
}
pcVar10 = (char *)0x0;
pcVar6 = os_free_mem;
pcVar7 = local_70;
}
(*pcVar6)(pcVar10,pcVar7);
iVar11 = 0;
goto LAB_000931cc;
}
iVar11 = 0x7531;
if (param_3 != 0x8b0d) goto LAB_00093170;
uVar9 = *(uint *)(param_2 + 0x10);
if ((uVar9 != 0) &&
(uVar8 = uVar9 + 0x108 | uVar9, (uVar8 & *(uint *)(unaff_gp + 0x18)) == 0)) {
iVar11 = 0x7534;
if (10 < local_68) {
*(undefined2 *)(param_2 + 0x14) = 0xb;
iVar11 = 0x108;
if ((uVar8 & *(uint *)(unaff_gp + 0x18)) == 0) {
__copy_user(uVar9,&ap_privtab);
if (iVar11 == 0) {
iVar11 = 0;
goto LAB_000931cc;
}
iVar11 = 0x7532;
}
else {
iVar11 = 0x7532;
}
}
goto LAB_00093170;
}
}
}
else if (param_3 == 0x8b21) {
local_48 = RtmpDevPrivFlagsGet(param_1);
RTMP_COM_IoctlHandle(piVar3,0,0x24,0,&local_48,0);
*(undefined1 *)(param_2 + 0x15) = 0;
LAB_00092e88:
*(undefined4 *)(param_2 + 0x10) = local_44;
}
else if (param_3 < 0x8b22) {
if (param_3 != 0x8b1a) {
if (param_3 != 0x8b1b) {
iVar11 = 0x7531;
goto LAB_00093170;
}
*(undefined2 *)(param_2 + 0x16) = 1;
local_48 = RtmpDevPrivFlagsGet(param_1);
local_44 = uVar12;
RTMP_AP_IoctlHandle(piVar3,&local_6c,0x23,0,&local_48,0);
uVar8 = (uint)local_3c;
uVar9 = *(uint *)(param_2 + 0x10);
*(ushort *)(param_2 + 0x14) = local_3c;
if ((uVar9 != 0) && (local_40 != 0)) {
if (((uVar9 + uVar8 | uVar9 | uVar8) & *(uint *)(unaff_gp + 0x18)) == 0) {
__copy_user();
}
iVar11 = 0x7532;
if (uVar8 != 0) goto LAB_00093170;
}
if (RTDebugLevel < 3) {
iVar11 = 0;
}
else {
printk("IOCTL::SIOCGIWESSID (Len=%d, ssid=%s...)\n",*(undefined2 *)(param_2 + 0x14),
*(undefined4 *)(param_2 + 0x10));
iVar11 = 0;
}
goto LAB_000931cc;
}
iVar4 = *piVar3;
if ((short)local_58 != 0) {
memset(&local_48,0,0x20) //possible issue identified - semgrep
uVar9 = 0x20;
if ((local_58 & 0xffff) < 0x21) {
uVar9 = local_58 & 0xffff;
}
if (((uVar9 + local_5c | local_5c | uVar9) & *(uint *)(unaff_gp + 0x18)) == 0) {
__copy_user(&local_48,local_5c,uVar9);
}
pcVar7 = (char *)((int)&local_4c + uVar9 + 3);
do {
__n = uVar9 //possible issue identified - semgrep
if (__n == 0) break;
cVar1 = *pcVar7;
pcVar7 = pcVar7 + -1;
uVar9 = __n - 1;
} while (cVar1 == '\0');
iVar5 = memcmp((void *)((int)piVar3 + *(int *)(iVar4 + 0xfc) * 0x1140 + 0x51b3),&local_48,
__n) //possible issue identified - semgrep
iVar11 = 0;
if (iVar5 != 0) {
memset((void *)((int)piVar3 + *(int *)(iVar4 + 0xfc) * 0x1140 + 0x51b3),0,0x20) //possible issue identified - semgrep
memmove((void *)((int)piVar3 + *(int *)(iVar4 + 0xfc) * 0x1140 + 0x51b3),&local_48,__n) //possible issue identified - semgrep
*(char *)((int)piVar3 + *(int *)(iVar4 + 0xfc) * 0x1140 + 0x51b2) = (char)__n;
if (((char)piVar3[0x5aa0] == '\0') || (cVar1 = (char)piVar3[0x5ab3], cVar1 == '\x02')) { //possible issue identified - semgrep
APStop(piVar3);
pcVar6 = APStartUp;
}
else {
iVar11 = 0;
if ((cVar1 == '\x01') || (cVar1 != '\0')) goto LAB_000931cc;
APStop(piVar3);
APStartUp(piVar3);
pcVar6 = AsicEnableBssSync;
}
(*pcVar6)(piVar3);
iVar11 = 0;
}
goto LAB_000931cc;
}
}
else {
if (param_3 == 0x8be1) {
uVar14 = *(undefined4 *)(param_2 + 0x10);
uVar13 = *(undefined2 *)(param_2 + 0x16);
uVar12 = 10;
LAB_0009305c:
iVar11 = RTMP_AP_IoctlHandle(piVar3,&local_6c,uVar12,uVar13,uVar14,0);
goto LAB_00093154;
}
iVar11 = 0x7531;
if (param_3 != 0x8be2) goto LAB_00093170;
if ((((uint)*(ushort *)(param_2 + 0x14) + *(uint *)(param_2 + 0x10) |
*(uint *)(param_2 + 0x10) | (uint)*(ushort *)(param_2 + 0x14)) &
*(uint *)(unaff_gp + 0x18)) == 0) {
uVar12 = 0xb;
goto LAB_00093054;
}
}
LAB_00093210:
iVar11 = 0;
goto LAB_000931cc;
}
*(undefined2 *)(param_2 + 0x10) = 1;
uVar14 = RtmpDevPrivFlagsGet(param_1);
iVar11 = param_2 + 0x12;
uVar12 = 0x21;
}
RTMP_AP_IoctlHandle(piVar3,&local_6c,uVar12,0,iVar11,uVar14);
iVar11 = 0;
LAB_000931cc:
if (local_68 != uVar2) {
*(ushort *)(param_2 + 0x14) = local_68;
}
return iVar11;
}