void PeerPairMsg2Action(int param_1,int *param_2,int param_3)

{
  void *pvVar1;
  char cVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  uint uVar6;
  undefined1 uVar7;
  undefined1 auStack_b0 [4];
  void *local_ac;
  undefined1 auStack_a8 [8];
  undefined1 auStack_a0 [6];
  undefined1 auStack_9a [6];
  undefined1 auStack_94 [4];
  undefined1 auStack_90 [80];
  uint local_40;
  void *local_3c;
  int *local_38;
  int local_34;
  uint local_30;
  
  if (2 < RTDebugLevel) {
    printk("===> PeerPairMsg2Action \n");
  }
  if ((((param_2 != (int *)0x0) && (*param_2 == 1)) && (0x82 < *(uint *)(param_3 + 0x648))) &&
     ((7 < *(byte *)(param_2 + 0x7c) &&
      (uVar6 = (uint)*(byte *)((int)param_2 + 0x31), uVar6 < *(byte *)(param_1 + 0x51aa))))) {
    iVar5 = param_1 + uVar6 * 0x1140;
    local_3c = (void *)(iVar5 + 0x51ac);
    local_30 = *(uint *)(iVar5 + 0x51e4);
    local_40 = (uint)*(byte *)(iVar5 + 0x5240);
    RTMPGetTxTscFromAsic(param_1,uVar6,auStack_a8);
    if (param_2[0x79] - 3U < 2) {
      uVar7 = *(undefined1 *)(iVar5 + 0x52e4);
      iVar5 = iVar5 + 0x52e6;
    }
    else {
      iVar4 = uVar6 * 0x1140 + 0x52e0;
      if (*(int *)(iVar5 + 0x51dc) - 8U < 2) {
        uVar7 = *(undefined1 *)(iVar5 + 0x52e5);
        iVar5 = param_1 + iVar4 + 0x105;
      }
      else {
        uVar7 = *(undefined1 *)(iVar5 + 0x52e4);
        iVar5 = param_1 + iVar4 + 6;
      }
    }
    iVar4 = *(int *)(param_3 + 0x648);
    memmove((void *)((int)param_2 + 0x152),(void *)(param_3 + 0x31),0x20)   //possible issue identified - semgrep
    local_34 = (int)param_2 + 0x132;
    local_38 = param_2 + 0x96;
    WpaDerivePTK(param_1,uVar6 * 0x1140 + param_1 + 0x5275,local_34,local_3c,
                 (void *)((int)param_2 + 0x152),local_38,auStack_90,0x40);
    memmove((void *)((int)param_2 + 0x17a),auStack_90,0x40)   //possible issue identified - semgrep
    iVar4 = PeerWpaMessageSanity(param_1,param_3 + 0x20,iVar4 + -0x20,2,param_2);
    if (iVar4 != 0) {
      os_alloc_mem(0,&local_ac,0x5dc);
      pvVar1 = local_ac;
      if (local_ac == (void *)0x0) {
        if (RTDebugLevel != 0) {
          printk("!!!%s : no memory!!!\n","PeerPairMsg2Action");
        }
      }
      else {
        memset(local_ac,0,0x5dc)   //possible issue identified - semgrep
        RTMPCancelTimer(param_2 + 0x6f,auStack_b0);
        *(undefined1 *)(param_2 + 0x7c) = 9;
        uVar3 = 7;
        do {
          uVar3 = uVar3 & 0xff;
          cVar2 = *(char *)((int)param_2 + uVar3 + 0x172) + '\x01'   //possible issue identified - semgrep
          *(char *)((int)param_2 + uVar3 + 0x172) = cVar2;
          if (uVar3 == 0) break;
          uVar3 = uVar3 - 1;
        } while (cVar2 == '\0');
        ConstructEapolMsg(param_2,local_30 & 0xff,3,local_40,local_34,auStack_a8,
                          uVar6 * 0x1140 + param_1 + 0x5295,iVar5,uVar7,pvVar1);
        memmove(auStack_a0,local_38,6)   //possible issue identified - semgrep
        memmove(auStack_9a,local_3c,6)   //possible issue identified - semgrep
        memmove(auStack_94,&EAPOL,2)   //possible issue identified - semgrep
        RTMPToWirelessSta(param_1,param_2,auStack_a0,0xe,pvVar1,
                          CONCAT11(*(undefined1 *)((int)pvVar1 + 2),*(undefined1 *)((int)pvVar1 + 3)
                                  ) + 4,*(short *)((int)param_2 + 0x1f2) != 1);
        *(undefined1 *)((int)param_2 + 0x1ba) = 10;
        RTMPSetTimer(param_2 + 0x6f,3000);
        *(undefined1 *)(param_2 + 0x7c) = 9;
        os_free_mem(0,local_ac);
        if (2 < RTDebugLevel) {
          printk("<=== PeerPairMsg2Action: send Msg3 of 4-way \n");
        }
      }
    }
  }
  return;
}