aboutsummaryrefslogtreecommitdiff
path: root/src/svf
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2023-03-10 12:01:03 +0100
committerAntonio Borneo <borneo.antonio@gmail.com>2023-03-25 18:08:45 +0000
commitf8631c3650c0e3a3c3e16726f1ca3748d163cc69 (patch)
treeed78f7cbc6b25c2d7bb1a533e24121f55689867f /src/svf
parent86827a961a22815ebd5fa367468ca7444f0ee2e1 (diff)
downloadriscv-openocd-f8631c3650c0e3a3c3e16726f1ca3748d163cc69.zip
riscv-openocd-f8631c3650c0e3a3c3e16726f1ca3748d163cc69.tar.gz
riscv-openocd-f8631c3650c0e3a3c3e16726f1ca3748d163cc69.tar.bz2
svf: fix memory leak on error during command execution
If svf_set_padding() returns error, jump to free_all label to prevent any memory leak. Propagate the error reported by svf_set_padding() instead of overwriting it. Use command_print() instead of LOG_ERROR() for command output. Change-Id: I61fd89cad10652f2f9ef1f9d48a040e35253c3d4 Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: https://review.openocd.org/c/openocd/+/7533 Tested-by: jenkins Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
Diffstat (limited to 'src/svf')
-rw-r--r--src/svf/svf.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/svf/svf.c b/src/svf/svf.c
index 05fb21d..2a13312 100644
--- a/src/svf/svf.c
+++ b/src/svf/svf.c
@@ -473,27 +473,31 @@ COMMAND_HANDLER(handle_svf_command)
}
/* HDR %d TDI (0) */
- if (svf_set_padding(&svf_para.hdr_para, header_dr_len, 0) != ERROR_OK) {
- LOG_ERROR("failed to set data header");
- return ERROR_FAIL;
+ ret = svf_set_padding(&svf_para.hdr_para, header_dr_len, 0);
+ if (ret != ERROR_OK) {
+ command_print(CMD, "failed to set data header");
+ goto free_all;
}
/* HIR %d TDI (0xFF) */
- if (svf_set_padding(&svf_para.hir_para, header_ir_len, 0xFF) != ERROR_OK) {
- LOG_ERROR("failed to set instruction header");
- return ERROR_FAIL;
+ ret = svf_set_padding(&svf_para.hir_para, header_ir_len, 0xFF);
+ if (ret != ERROR_OK) {
+ command_print(CMD, "failed to set instruction header");
+ goto free_all;
}
/* TDR %d TDI (0) */
- if (svf_set_padding(&svf_para.tdr_para, trailer_dr_len, 0) != ERROR_OK) {
- LOG_ERROR("failed to set data trailer");
- return ERROR_FAIL;
+ ret = svf_set_padding(&svf_para.tdr_para, trailer_dr_len, 0);
+ if (ret != ERROR_OK) {
+ command_print(CMD, "failed to set data trailer");
+ goto free_all;
}
/* TIR %d TDI (0xFF) */
- if (svf_set_padding(&svf_para.tir_para, trailer_ir_len, 0xFF) != ERROR_OK) {
- LOG_ERROR("failed to set instruction trailer");
- return ERROR_FAIL;
+ ret = svf_set_padding(&svf_para.tir_para, trailer_ir_len, 0xFF);
+ if (ret != ERROR_OK) {
+ command_print(CMD, "failed to set instruction trailer");
+ goto free_all;
}
}