struct ieee80211_hdr *hdr = data;
        struct ieee80211_ht_cap *ht_cap_ie;
        struct ieee80211_ht_operation *ht_oper_ie = NULL;
-       struct rtl_beacon_keys bcn_key;
+       struct rtl_beacon_keys bcn_key = {};
        struct rtl_beacon_keys *cur_bcn_key;
        u8 *ht_cap;
        u8 ht_cap_len;
        /***** Parsing DS Param IE ******/
        ds_param = rtl_find_ie(data, len - FCS_LEN, WLAN_EID_DS_PARAMS);
 
-       if (ds_param && !(ds_param[1] < sizeof(*ds_param)))
+       if (ds_param && !(ds_param[1] < sizeof(*ds_param))) {
                ds_param_len = ds_param[1];
-       else
+               bcn_key.bcn_channel = ds_param[2];
+       } else {
                ds_param = NULL;
+       }
 
        /***** Parsing HT Cap. IE ******/
        ht_cap = rtl_find_ie(data, len - FCS_LEN, WLAN_EID_HT_CAPABILITY);
        if (ht_cap && !(ht_cap[1] < sizeof(*ht_cap))) {
                ht_cap_len = ht_cap[1];
                ht_cap_ie = (struct ieee80211_ht_cap *)&ht_cap[2];
+               bcn_key.ht_cap_info = ht_cap_ie->cap_info;
        } else  {
                ht_cap = NULL;
        }
        }
 
        /* update bcn_key */
-       memset(&bcn_key, 0, sizeof(bcn_key));
 
-       if (ds_param)
-               bcn_key.bcn_channel = ds_param[2];
-       else if (ht_oper && ht_oper_ie)
+       if (!ds_param && ht_oper && ht_oper_ie)
                bcn_key.bcn_channel = ht_oper_ie->primary_chan;
 
-       if (ht_cap)
-               bcn_key.ht_cap_info = ht_cap_ie->cap_info;
-
        if (ht_oper && ht_oper_ie)
                bcn_key.ht_info_infos_0_sco = ht_oper_ie->ht_param & 0x03;