From 7a09635735486dd2d74576b003c85c7ff16705d5 Mon Sep 17 00:00:00 2001 From: Antonio Borneo Date: Wed, 2 Nov 2022 00:33:16 +0100 Subject: [PATCH] openrisc: fix clang error core.CallAndMessage Clang assumes that size could assume a value that is not 1 nor 2 nor 4. In such condition the buffer in t is allocated (size != 1) and not initialized. This triggers an error: src/target/openrisc/or1k_du_adv.c:655:14: warning: 2nd function call argument is an uninitialized value [core.CallAndMessage] crc_calc = adbg_compute_crc(crc_calc, data[i], 8); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Add the default case to cover other values of size. After this fix, clang still complains on the same line, this time misunderstanding the limits of the loop and considering that buf_bswap16() only swaps the first 16 bits, thus passing not initialized value data[2] to adbg_compute_crc() Replace malloc() with calloc() to silent it. Change-Id: I358d7fb2ebefd69255670641bd435b770762a301 Signed-off-by: Antonio Borneo Reviewed-on: https://review.openocd.org/c/openocd/+/7300 Tested-by: jenkins --- src/target/openrisc/or1k_du_adv.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/target/openrisc/or1k_du_adv.c b/src/target/openrisc/or1k_du_adv.c index cfb7d0ef02..e4c89e5b52 100644 --- a/src/target/openrisc/or1k_du_adv.c +++ b/src/target/openrisc/or1k_du_adv.c @@ -934,7 +934,7 @@ static int or1k_adv_jtag_write_memory(struct or1k_jtag *jtag_info, void *t = NULL; struct target *target = jtag_info->target; if ((target->endianness == TARGET_BIG_ENDIAN) && (size != 1)) { - t = malloc(count * size * sizeof(uint8_t)); + t = calloc(count * size, sizeof(uint8_t)); if (!t) { LOG_ERROR("Out of memory"); return ERROR_FAIL; @@ -947,6 +947,9 @@ static int or1k_adv_jtag_write_memory(struct or1k_jtag *jtag_info, case 2: buf_bswap16(t, buffer, size * count); break; + default: + free(t); + return ERROR_TARGET_FAILURE; } buffer = t; } -- 2.30.2