mac80211: Free mpath object when rhashtable insertion fails
When rhashtable insertion fails the mesh table code doesn't free the now-orphan mesh path object. This patch fixes that. Cc: stable@vger.kernel.org Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
b4c3fbe636
commit
4ff3a9d14c
|
@ -436,17 +436,15 @@ struct mesh_path *mesh_path_add(struct ieee80211_sub_if_data *sdata,
|
||||||
} while (unlikely(ret == -EEXIST && !mpath));
|
} while (unlikely(ret == -EEXIST && !mpath));
|
||||||
spin_unlock_bh(&tbl->walk_lock);
|
spin_unlock_bh(&tbl->walk_lock);
|
||||||
|
|
||||||
if (ret && ret != -EEXIST)
|
if (ret) {
|
||||||
|
kfree(new_mpath);
|
||||||
|
|
||||||
|
if (ret != -EEXIST)
|
||||||
return ERR_PTR(ret);
|
return ERR_PTR(ret);
|
||||||
|
|
||||||
/* At this point either new_mpath was added, or we found a
|
|
||||||
* matching entry already in the table; in the latter case
|
|
||||||
* free the unnecessary new entry.
|
|
||||||
*/
|
|
||||||
if (ret == -EEXIST) {
|
|
||||||
kfree(new_mpath);
|
|
||||||
new_mpath = mpath;
|
new_mpath = mpath;
|
||||||
}
|
}
|
||||||
|
|
||||||
sdata->u.mesh.mesh_paths_generation++;
|
sdata->u.mesh.mesh_paths_generation++;
|
||||||
return new_mpath;
|
return new_mpath;
|
||||||
}
|
}
|
||||||
|
@ -481,6 +479,9 @@ int mpp_path_add(struct ieee80211_sub_if_data *sdata,
|
||||||
hlist_add_head_rcu(&new_mpath->walk_list, &tbl->walk_head);
|
hlist_add_head_rcu(&new_mpath->walk_list, &tbl->walk_head);
|
||||||
spin_unlock_bh(&tbl->walk_lock);
|
spin_unlock_bh(&tbl->walk_lock);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
kfree(new_mpath);
|
||||||
|
|
||||||
sdata->u.mesh.mpp_paths_generation++;
|
sdata->u.mesh.mpp_paths_generation++;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue