};
 
 struct cfg80211_cached_keys {
-       struct key_params params[6];
-       u8 data[6][WLAN_MAX_KEY_LEN];
-       int def, defmgmt;
+       struct key_params params[4];
+       u8 data[4][WLAN_KEY_LEN_WEP104];
+       int def;
 };
 
 enum cfg80211_chan_mode {
 
        if (!netif_running(wdev->netdev))
                return 0;
 
-       if (wdev->wext.keys) {
+       if (wdev->wext.keys)
                wdev->wext.keys->def = wdev->wext.default_key;
-               wdev->wext.keys->defmgmt = wdev->wext.default_mgmt_key;
-       }
 
        wdev->wext.ibss.privacy = wdev->wext.default_key != -1;
 
                ck = kmemdup(wdev->wext.keys, sizeof(*ck), GFP_KERNEL);
                if (!ck)
                        return -ENOMEM;
-               for (i = 0; i < 6; i++)
+               for (i = 0; i < 4; i++)
                        ck->params[i].key = ck->data[i];
        }
        err = __cfg80211_join_ibss(rdev, wdev->netdev,
 
                return ERR_PTR(-ENOMEM);
 
        result->def = -1;
-       result->defmgmt = -1;
 
        nla_for_each_nested(key, keys, rem) {
                memset(&parse, 0, sizeof(parse));
 
        if (!wdev->connect_keys)
                return;
 
-       for (i = 0; i < 6; i++) {
+       for (i = 0; i < 4; i++) {
                if (!wdev->connect_keys->params[i].cipher)
                        continue;
                if (rdev_add_key(rdev, dev, i, false, NULL,
                                netdev_err(dev, "failed to set defkey %d\n", i);
                                continue;
                        }
-               if (wdev->connect_keys->defmgmt == i)
-                       if (rdev_set_default_mgmt_key(rdev, dev, i))
-                               netdev_err(dev, "failed to set mgtdef %d\n", i);
        }
 
        kzfree(wdev->connect_keys);
 
 
        if (!wdev->wext.keys) {
                wdev->wext.keys = kzalloc(sizeof(*wdev->wext.keys),
-                                             GFP_KERNEL);
+                                         GFP_KERNEL);
                if (!wdev->wext.keys)
                        return -ENOMEM;
-               for (i = 0; i < 6; i++)
+               for (i = 0; i < 4; i++)
                        wdev->wext.keys->params[i].key =
                                wdev->wext.keys->data[i];
        }
                if (err == -ENOENT)
                        err = 0;
                if (!err) {
-                       if (!addr) {
+                       if (!addr && idx < 4) {
                                memset(wdev->wext.keys->data[idx], 0,
                                       sizeof(wdev->wext.keys->data[idx]));
                                wdev->wext.keys->params[idx].key_len = 0;
 
 
        if (wdev->wext.keys) {
                wdev->wext.keys->def = wdev->wext.default_key;
-               wdev->wext.keys->defmgmt = wdev->wext.default_mgmt_key;
                if (wdev->wext.default_key != -1)
                        wdev->wext.connect.privacy = true;
        }
                ck = kmemdup(wdev->wext.keys, sizeof(*ck), GFP_KERNEL);
                if (!ck)
                        return -ENOMEM;
-               for (i = 0; i < 6; i++)
+               for (i = 0; i < 4; i++)
                        ck->params[i].key = ck->data[i];
        }