[RAMEN9610-20868]wlbt: fix memory leak in wlan_sw.hcf loading
authorYoungsoo <youngss.kim@samsung.com>
Thu, 7 Nov 2019 11:37:15 +0000 (20:37 +0900)
committerlulu2 <lulu2@lenovo.com>
Wed, 13 Nov 2019 06:48:29 +0000 (14:48 +0800)
The second HCF file was not being freed

cherry-pick change-Id: I2327Montana6226241e9f6e8aceba6dd7c69ee9bdc81
SCSC-Bug-Id: HOST-11402

Change-Id: I0f4f28f110022bb74763ece881eeabb6af40fc88
Signed-off-by: Youngsoo <youngss.kim@samsung.com>
drivers/net/wireless/scsc/mgt.c
include/scsc/scsc_release.h

index 9cf0906c906a96602a27afccddca5d6d6dff1096..91fdee30614815e1a7a0cdfe6629541426875763 100755 (executable)
@@ -572,7 +572,7 @@ struct scsc_log_collector_client slsi_hcf_client = {
 int slsi_start(struct slsi_dev *sdev)
 {
 #ifndef CONFIG_SCSC_DOWNLOAD_FILE
-       const struct firmware *fw = NULL;
+       const struct firmware *fw[SLSI_WLAN_MAX_MIB_FILE] = { NULL, NULL };
 #endif
        int  err = 0, r;
        int i;
@@ -653,8 +653,8 @@ int slsi_start(struct slsi_dev *sdev)
        }
 
        /* Place MIB files in shared memory */
-       for (i  = 0; i < SLSI_WLAN_MAX_MIB_FILE; i++) {
-               err = slsi_mib_open_file(sdev, &sdev->mib[i], &fw);
+       for (i = 0; i < SLSI_WLAN_MAX_MIB_FILE; i++) {
+               err = slsi_mib_open_file(sdev, &sdev->mib[i], &fw[i]);
 
                /* Only the first file is mandatory */
                if (i == 0 && err) {
@@ -667,11 +667,13 @@ int slsi_start(struct slsi_dev *sdev)
        err = slsi_sm_wlan_service_start(sdev);
        if (err) {
                SLSI_ERR(sdev, "slsi_sm_wlan_service_start failed: err=%d\n", err);
-               slsi_mib_close_file(sdev, fw);
+               for (i = 0; i < SLSI_WLAN_MAX_MIB_FILE; i++)
+                       slsi_mib_close_file(sdev, fw[i]);
                slsi_sm_wlan_service_close(sdev);
                goto err_done;
        }
-       slsi_mib_close_file(sdev, fw);
+       for (i = 0; i < SLSI_WLAN_MAX_MIB_FILE; i++)
+               slsi_mib_close_file(sdev, fw[i]);
 #else
        /* Download main MIB file via mlme_set */
        err = slsi_sm_wlan_service_start(sdev);
@@ -6270,7 +6272,7 @@ void slsi_subsystem_reset(struct work_struct *work)
        int err = 0, i;
        int level;
 #ifndef CONFIG_SCSC_DOWNLOAD_FILE
-       const struct firmware *fw = NULL;
+       const struct firmware *fw[SLSI_WLAN_MAX_MIB_FILE] = { NULL, NULL };
 #endif
        level = atomic_read(&sdev->cm_if.reset_level);
        SLSI_INFO_NODEV("Inside subsytem_reset\n");
@@ -6312,7 +6314,7 @@ void slsi_subsystem_reset(struct work_struct *work)
        sdev->collect_mib.num_files = 0;
        /* Place MIB files in shared memory */
        for (i  = 0; i < SLSI_WLAN_MAX_MIB_FILE; i++) {
-               err = slsi_mib_open_file(sdev, &sdev->mib[i], &fw);
+               err = slsi_mib_open_file(sdev, &sdev->mib[i], &fw[i]);
 
                /* Only the first file is mandatory */
                if (i == 0 && err) {
@@ -6325,12 +6327,14 @@ void slsi_subsystem_reset(struct work_struct *work)
        err = slsi_sm_recovery_service_start(sdev);
        if (err) {
                SLSI_ERR(sdev, "slsi_sm_wlan_service_start failed: err=%d\n", err);
-               slsi_mib_close_file(sdev, fw);
+               for (i = 0; i < SLSI_WLAN_MAX_MIB_FILE; i++)
+                       slsi_mib_close_file(sdev, fw[i]);
                slsi_sm_recovery_service_close(sdev);
                sdev->device_state = SLSI_DEVICE_STATE_STOPPED;
                return;
        }
-       slsi_mib_close_file(sdev, fw);
+       for (i = 0; i < SLSI_WLAN_MAX_MIB_FILE; i++)
+               slsi_mib_close_file(sdev, fw[i]);
 #else
        /* Download main MIB file via mlme_set */
        err = slsi_sm_recovery_service_start(sdev);
index 163888a3f4cc3e704e7be1ee4eae0f2c56ddb3a2..64324dc81287dbdfce686fd9444f9db6b2532fc9 100644 (file)
@@ -23,7 +23,7 @@
 #define SCSC_RELEASE_ITERATION 6
 #define SCSC_RELEASE_CANDIDATE 1
 
-#define SCSC_RELEASE_POINT 2
+#define SCSC_RELEASE_POINT 3
 
 #endif