Skip to content

Commit

Permalink
mac80211_hwsim: fix module init error paths
Browse files Browse the repository at this point in the history
We didn't free the workqueue on any errors, nor did we
correctly check for rhashtable allocation errors, nor
did we free the hashtable on error.

Reported-by: Colin King <colin.king@canonical.com>
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
  • Loading branch information
Johannes Berg authored and Johannes Berg committed Jun 15, 2018
1 parent 3c12d04 commit 3f61b7a
Showing 1 changed file with 9 additions and 2 deletions.
11 changes: 9 additions & 2 deletions drivers/net/wireless/mac80211_hwsim.c
Original file line number Diff line number Diff line change
Expand Up @@ -3572,11 +3572,14 @@ static int __init init_mac80211_hwsim(void)
hwsim_wq = alloc_workqueue("hwsim_wq", 0, 0);
if (!hwsim_wq)
return -ENOMEM;
rhashtable_init(&hwsim_radios_rht, &hwsim_rht_params);

err = rhashtable_init(&hwsim_radios_rht, &hwsim_rht_params);
if (err)
goto out_free_wq;

err = register_pernet_device(&hwsim_net_ops);
if (err)
return err;
goto out_free_rht;

err = platform_driver_register(&mac80211_hwsim_driver);
if (err)
Expand Down Expand Up @@ -3701,6 +3704,10 @@ static int __init init_mac80211_hwsim(void)
platform_driver_unregister(&mac80211_hwsim_driver);
out_unregister_pernet:
unregister_pernet_device(&hwsim_net_ops);
out_free_rht:
rhashtable_destroy(&hwsim_radios_rht);
out_free_wq:
destroy_workqueue(hwsim_wq);
return err;
}
module_init(init_mac80211_hwsim);
Expand Down

0 comments on commit 3f61b7a

Please sign in to comment.