]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: cfg80211: fix memory leak in query_regdb_file()
authorArend van Spriel <arend.vanspriel@broadcom.com>
Thu, 20 Oct 2022 11:40:40 +0000 (13:40 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 16 Nov 2022 08:57:08 +0000 (09:57 +0100)
[ Upstream commit 57b962e627ec0ae53d4d16d7bd1033e27e67677a ]

In the function query_regdb_file() the alpha2 parameter is duplicated
using kmemdup() and subsequently freed in regdb_fw_cb(). However,
request_firmware_nowait() can fail without calling regdb_fw_cb() and
thus leak memory.

Fixes: 007f6c5e6eb4 ("cfg80211: support loading regulatory database as firmware file")
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/wireless/reg.c

index fd848609e656a5689624c27ab9b20c4c3a363e24..a1e64d967bd386011b229434c29c521ad4c750f4 100644 (file)
@@ -1064,6 +1064,8 @@ MODULE_FIRMWARE("regulatory.db");
 
 static int query_regdb_file(const char *alpha2)
 {
+       int err;
+
        ASSERT_RTNL();
 
        if (regdb)
@@ -1073,9 +1075,13 @@ static int query_regdb_file(const char *alpha2)
        if (!alpha2)
                return -ENOMEM;
 
-       return request_firmware_nowait(THIS_MODULE, true, "regulatory.db",
-                                      &reg_pdev->dev, GFP_KERNEL,
-                                      (void *)alpha2, regdb_fw_cb);
+       err = request_firmware_nowait(THIS_MODULE, true, "regulatory.db",
+                                     &reg_pdev->dev, GFP_KERNEL,
+                                     (void *)alpha2, regdb_fw_cb);
+       if (err)
+               kfree(alpha2);
+
+       return err;
 }
 
 int reg_reload_regdb(void)