Showing error 1895

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


Source:

210}
211
212void ieee80211_set_default_key(struct ieee80211_sub_if_data *sdata, int idx)
213{
214        unsigned long flags;
215
216        spin_lock_irqsave(&sdata->local->key_lock, flags);
217        __ieee80211_set_default_key(sdata, idx);
218        spin_unlock_irqrestore(&sdata->local->key_lock, flags);
219}
220
221
222static void __ieee80211_key_replace(struct ieee80211_sub_if_data *sdata,
223                                    struct sta_info *sta,
224                                    struct ieee80211_key *old,
225                                    struct ieee80211_key *new)
226{
227        int idx, defkey;
228
229        if (new)
230                list_add(&new->list, &sdata->key_list);
231
232        if (sta) {
233                rcu_assign_pointer(sta->key, new);
234        } else {
235                WARN_ON(new && old && new->conf.keyidx != old->conf.keyidx);
236
237                if (old)
238                        idx = old->conf.keyidx;
239                else
240                        idx = new->conf.keyidx;
241
242                defkey = old && sdata->default_key == old;
243
244                if (defkey && !new)
245                        __ieee80211_set_default_key(sdata, -1);
246
247                rcu_assign_pointer(sdata->keys[idx], new);
248                if (defkey && new)
249                        __ieee80211_set_default_key(sdata, new->conf.keyidx);
250        }
Show full sources