diff options
author | Ola Olsson <ola1olsson@gmail.com> | 2015-12-13 21:12:03 +0300 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2015-12-15 15:08:02 +0300 |
commit | 09d118008f9815181d2114b84800e68019cd7b7d (patch) | |
tree | 80ff2dc7806ae3f6a95de9d8f7ac98827552ae4f | |
parent | b7bb110008607a915298bf0f47d25886ecb94477 (diff) | |
download | linux-09d118008f9815181d2114b84800e68019cd7b7d.tar.xz |
nl80211: fix a few memory leaks in reg.c
The first leak occurs when entering the default case
in the switch for the initiator in set_regdom.
The second leaks a platform_device struct if the
platform registration in regulatory_init succeeds but
the sub sequent regulatory hint fails due to no memory.
Signed-off-by: Ola Olsson <ola.olsson@sonymobile.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | net/wireless/reg.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 2e8d6f39ed56..06d050da0d94 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -3029,6 +3029,7 @@ int set_regdom(const struct ieee80211_regdomain *rd, break; default: WARN(1, "invalid initiator %d\n", lr->initiator); + kfree(rd); return -EINVAL; } @@ -3221,8 +3222,10 @@ int __init regulatory_init(void) /* We always try to get an update for the static regdomain */ err = regulatory_hint_core(cfg80211_world_regdom->alpha2); if (err) { - if (err == -ENOMEM) + if (err == -ENOMEM) { + platform_device_unregister(reg_pdev); return err; + } /* * N.B. kobject_uevent_env() can fail mainly for when we're out * memory which is handled and propagated appropriately above |