struct mp_priv *pmppriv = &padapter->mppriv;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-       struct wlan_bssid_ex bssid;
+       struct wlan_bssid_ex *bssid;
        struct sta_info *psta;
        unsigned long length;
        unsigned long irqL;
        int res = 0;
 
+       bssid = kzalloc(sizeof(*bssid), GFP_KERNEL);
+       if (!bssid)
+               return -ENOMEM;
+
        /* 3 1. initialize a new struct wlan_bssid_ex */
-       memcpy(bssid.MacAddress, pmppriv->network_macaddr, ETH_ALEN);
-       bssid.Ssid.SsidLength = 16;
-       memcpy(bssid.Ssid.Ssid, (unsigned char *)"mp_pseudo_adhoc",
-               bssid.Ssid.SsidLength);
-       bssid.InfrastructureMode = Ndis802_11IBSS;
-       bssid.NetworkTypeInUse = Ndis802_11DS;
-       bssid.IELength = 0;
-       length = r8712_get_wlan_bssid_ex_sz(&bssid);
+       memcpy(bssid->MacAddress, pmppriv->network_macaddr, ETH_ALEN);
+       bssid->Ssid.SsidLength = 16;
+       memcpy(bssid->Ssid.Ssid, (unsigned char *)"mp_pseudo_adhoc",
+               bssid->Ssid.SsidLength);
+       bssid->InfrastructureMode = Ndis802_11IBSS;
+       bssid->NetworkTypeInUse = Ndis802_11DS;
+       bssid->IELength = 0;
+       length = r8712_get_wlan_bssid_ex_sz(bssid);
        if (length % 4) {
                /*round up to multiple of 4 bytes.*/
-               bssid.Length = ((length >> 2) + 1) << 2;
+               bssid->Length = ((length >> 2) + 1) << 2;
        } else {
-               bssid.Length = length;
+               bssid->Length = length;
        }
        spin_lock_irqsave(&pmlmepriv->lock, irqL);
        if (check_fwstate(pmlmepriv, WIFI_MP_STATE))
                                 tgt_network->network.MacAddress);
        if (psta)
                r8712_free_stainfo(padapter, psta);
-       psta = r8712_alloc_stainfo(&padapter->stapriv, bssid.MacAddress);
+       psta = r8712_alloc_stainfo(&padapter->stapriv, bssid->MacAddress);
        if (!psta) {
                res = -ENOMEM;
                goto end_of_mp_start_test;
        set_fwstate(pmlmepriv, _FW_LINKED);
 end_of_mp_start_test:
        spin_unlock_irqrestore(&pmlmepriv->lock, irqL);
+       kfree(bssid);
        return res;
 }