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>
This commit is contained in:
parent
86827a961a
commit
f8631c3650
|
@ -473,27 +473,31 @@ COMMAND_HANDLER(handle_svf_command)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HDR %d TDI (0) */
|
/* HDR %d TDI (0) */
|
||||||
if (svf_set_padding(&svf_para.hdr_para, header_dr_len, 0) != ERROR_OK) {
|
ret = svf_set_padding(&svf_para.hdr_para, header_dr_len, 0);
|
||||||
LOG_ERROR("failed to set data header");
|
if (ret != ERROR_OK) {
|
||||||
return ERROR_FAIL;
|
command_print(CMD, "failed to set data header");
|
||||||
|
goto free_all;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HIR %d TDI (0xFF) */
|
/* HIR %d TDI (0xFF) */
|
||||||
if (svf_set_padding(&svf_para.hir_para, header_ir_len, 0xFF) != ERROR_OK) {
|
ret = svf_set_padding(&svf_para.hir_para, header_ir_len, 0xFF);
|
||||||
LOG_ERROR("failed to set instruction header");
|
if (ret != ERROR_OK) {
|
||||||
return ERROR_FAIL;
|
command_print(CMD, "failed to set instruction header");
|
||||||
|
goto free_all;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TDR %d TDI (0) */
|
/* TDR %d TDI (0) */
|
||||||
if (svf_set_padding(&svf_para.tdr_para, trailer_dr_len, 0) != ERROR_OK) {
|
ret = svf_set_padding(&svf_para.tdr_para, trailer_dr_len, 0);
|
||||||
LOG_ERROR("failed to set data trailer");
|
if (ret != ERROR_OK) {
|
||||||
return ERROR_FAIL;
|
command_print(CMD, "failed to set data trailer");
|
||||||
|
goto free_all;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TIR %d TDI (0xFF) */
|
/* TIR %d TDI (0xFF) */
|
||||||
if (svf_set_padding(&svf_para.tir_para, trailer_ir_len, 0xFF) != ERROR_OK) {
|
ret = svf_set_padding(&svf_para.tir_para, trailer_ir_len, 0xFF);
|
||||||
LOG_ERROR("failed to set instruction trailer");
|
if (ret != ERROR_OK) {
|
||||||
return ERROR_FAIL;
|
command_print(CMD, "failed to set instruction trailer");
|
||||||
|
goto free_all;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue