Patch "cfg80211: always free wiphy specific regdomain" has been added to the 5.14-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    cfg80211: always free wiphy specific regdomain

to the 5.14-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     cfg80211-always-free-wiphy-specific-regdomain.patch
and it can be found in the queue-5.14 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4a14fd416767526683f4e38efc9a5b2b323adad8
Author: Johannes Berg <johannes.berg@xxxxxxxxx>
Date:   Mon Sep 27 13:11:06 2021 +0200

    cfg80211: always free wiphy specific regdomain
    
    [ Upstream commit e53e9828a8d2c6545e01ff9711f1221f2fd199ce ]
    
    In the (somewhat unlikely) event that we allocate a wiphy, then
    add a regdomain to it, and then fail registration, we leak the
    regdomain. Fix this by just always freeing it at the end, in the
    normal cases we'll free (and NULL) it during wiphy_unregister().
    This happened when the wiphy settings were bad, and since they
    can be controlled by userspace with hwsim, syzbot was able to
    find this issue.
    
    Reported-by: syzbot+1638e7c770eef6b6c0d0@xxxxxxxxxxxxxxxxxxxxxxxxx
    Fixes: 3e0c3ff36c4c ("cfg80211: allow multiple driver regulatory_hints()")
    Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>
    Link: https://lore.kernel.org/r/20210927131105.68b70cef4674.I4b9f0aa08c2af28555963b9fe3d34395bb72e0cc@changeid
    Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/net/wireless/core.c b/net/wireless/core.c
index aaba847d79eb2..eb297e1015e05 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -1081,6 +1081,16 @@ void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
 	list_for_each_entry_safe(scan, tmp, &rdev->bss_list, list)
 		cfg80211_put_bss(&rdev->wiphy, &scan->pub);
 	mutex_destroy(&rdev->wiphy.mtx);
+
+	/*
+	 * The 'regd' can only be non-NULL if we never finished
+	 * initializing the wiphy and thus never went through the
+	 * unregister path - e.g. in failure scenarios. Thus, it
+	 * cannot have been visible to anyone if non-NULL, so we
+	 * can just free it here.
+	 */
+	kfree(rcu_dereference_raw(rdev->wiphy.regd));
+
 	kfree(rdev);
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux