Showing error 1886

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: net/ieee80211/ieee80211_wx.c
Line in file: 416
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-11 08:47:26 UTC


Source:

386                        request_module("ieee80211_crypt_wep");
387                        new_crypt->ops = ieee80211_get_crypto_ops("WEP");
388                }
389
390                if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
391                        new_crypt->priv = new_crypt->ops->init(key);
392
393                if (!new_crypt->ops || !new_crypt->priv) {
394                        kfree(new_crypt);
395                        new_crypt = NULL;
396
397                        printk(KERN_WARNING "%s: could not initialize WEP: "
398                               "load module ieee80211_crypt_wep\n", dev->name);
399                        return -EOPNOTSUPP;
400                }
401                *crypt = new_crypt;
402        }
403
404        /* If a new key was provided, set it up */
405        if (erq->length > 0) {
406                len = erq->length <= 5 ? 5 : 13;
407                memcpy(sec.keys[key], keybuf, erq->length);
408                if (len > erq->length)
409                        memset(sec.keys[key] + erq->length, 0,
410                               len - erq->length);
411                IEEE80211_DEBUG_WX("Setting key %d to '%s' (%d:%d bytes)\n",
412                                   key, escape_essid(sec.keys[key], len),
413                                   erq->length, len);
414                sec.key_sizes[key] = len;
415                if (*crypt)
416                        (*crypt)->ops->set_key(sec.keys[key], len, NULL,
417                                               (*crypt)->priv);
418                sec.flags |= (1 << key);
419                /* This ensures a key will be activated if no key is
420                 * explicitly set */
421                if (key == sec.active_key)
422                        sec.flags |= SEC_ACTIVE_KEY;
423
424        } else {
425                if (host_crypto) {
426                        len = (*crypt)->ops->get_key(sec.keys[key], WEP_KEY_LEN,
Show full sources