memory: brcmstb_dpfe: Fix memory leak
PATCH v2 1/1 memory: brcmstb_dpfe: Fix memory leak
In brcmstb_dpfe_download_firmware(), memory is allocated to variable fw by firmware_request_nowarn(), but never released. Fix up to release fw on all return paths.
---
v2: Don't assign ret unnecessarily (Krzysztof)
--- drivers/memory/brcmstb_dpfe.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
drivers/memory/brcmstb_dpfe.c +10 -6
@@ -647,8 +647,10 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *priv)return (ret == -ENOENT ) ? -EPROBE_DEFER : ret; ret =__verify_firmware (&init, fw); -if (ret) -return -EFAULT ; +if (ret) { + ret = -EFAULT ; + goto release_fw; + }__disable_dcpu (priv);
@@ -667,18 +669,20 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *priv) ret =__write_firmware (priv->dmem, dmem, dmem_size, is_big_endian);if (ret) -return ret; + goto release_fw; ret =__write_firmware (priv->imem, imem, imem_size, is_big_endian);if (ret) -return ret; + goto release_fw; ret =__verify_fw_checksum (&init, priv, header, init.chksum);if (ret) -return ret; + goto release_fw;__enable_dcpu (priv); -return 0 ; +release_fw: +release_firmware (fw); +return ret; } static ssize_t generic_show(unsigned int command, u32 response[],
Signature · 1 line
2.28.0
Quoted 4 lines · Alex Dewar
In
brcmstb_dpfe_download_firmware(), memory is allocated to variable fw byfirmware_request_nowarn(), but never released. Fix up to release fw on all return paths.
Thanks for the fix!
Quoted 52 lines
Signed-off-by Alex Dewar <[email protected]>---
v2: Don't assign ret unnecessarily (Krzysztof)--- drivers/memory/brcmstb_dpfe.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)drivers/memory/brcmstb_dpfe.c +10
-7@@ -647,8 +647,10 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *priv)return (ret == -ENOENT ) ? -EPROBE_DEFER : ret; ret =__verify_firmware (&init, fw); -if (ret) -return -EFAULT ; +if (ret) { + ret = -EFAULT ; + goto release_fw; + }__disable_dcpu (priv);@@ -667,18 +669,20 @@ static int brcmstb_dpfe_download_firmware(struct brcmstb_dpfe_priv *priv) ret =__write_firmware (priv->dmem, dmem, dmem_size, is_big_endian);if (ret) -return ret; + goto release_fw; ret =__write_firmware (priv->imem, imem, imem_size, is_big_endian);if (ret) -return ret; + goto release_fw; ret =__verify_fw_checksum (&init, priv, header, init.chksum);if (ret) -return ret; + goto release_fw;__enable_dcpu (priv); -return 0 ; +release_fw: +release_firmware (fw); +return ret; } static ssize_t generic_show(unsigned int command, u32 response[], --2.28.0
Quoted 5 lines · Alex Dewar
In
brcmstb_dpfe_download_firmware(), memory is allocated to variable fw byfirmware_request_nowarn(), but never released. Fix up to release fw on all return paths.Signed-off-by Alex Dewar <[email protected]>
Signature · 1 line
Florian
Quoted 9 lines · Alex Dewar
In
brcmstb_dpfe_download_firmware(), memory is allocated to variable fw byfirmware_request_nowarn(), but never released. Fix up to release fw on all return paths.Signed-off-by Alex Dewar <[email protected]>---
v2: Don't assign ret unnecessarily (Krzysztof)--- drivers/memory/brcmstb_dpfe.c | 16 ++++++++++------
Thanks, applied with acks, CC stable and Fixes tag.
Best regards,
Krzysztof