From 6dbaa0bfe551eabb34c1ae9756f2dd1a67dbbb7f Mon Sep 17 00:00:00 2001 From: Youngsoo Date: Thu, 7 Nov 2019 20:37:15 +0900 Subject: [PATCH] [RAMEN9610-20868]wlbt: fix memory leak in wlan_sw.hcf loading The second HCF file was not being freed cherry-pick change-Id: I2327d526226241e9f6e8aceba6dd7c69ee9bdc81 SCSC-Bug-Id: HOST-11402 Change-Id: I0f4f28f110022bb74763ece881eeabb6af40fc88 Signed-off-by: Youngsoo --- drivers/net/wireless/scsc/mgt.c | 22 +++++++++++++--------- include/scsc/scsc_release.h | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/drivers/net/wireless/scsc/mgt.c b/drivers/net/wireless/scsc/mgt.c index fe1de7f1abe9..8a7032e06d57 100755 --- a/drivers/net/wireless/scsc/mgt.c +++ b/drivers/net/wireless/scsc/mgt.c @@ -524,7 +524,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; @@ -605,8 +605,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) { @@ -619,11 +619,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); @@ -6208,7 +6210,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"); @@ -6250,7 +6252,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) { @@ -6263,12 +6265,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); diff --git a/include/scsc/scsc_release.h b/include/scsc/scsc_release.h index 163888a3f4cc..64324dc81287 100644 --- a/include/scsc/scsc_release.h +++ b/include/scsc/scsc_release.h @@ -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 -- 2.20.1