aboutsummaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
authorErhan Kurubas <erhan.kurubas@espressif.com>2022-05-28 08:30:21 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2022-06-10 21:56:47 +0000
commit480d4e17727864f75dc60e22cb1a42e022cb1db3 (patch)
tree5cb6e73a0ae3a000023e7d4e8167a8224659dc70 /src/target
parent70338509ca52a9b78c52a5d464ba2605fbaf193b (diff)
downloadriscv-openocd-480d4e17727864f75dc60e22cb1a42e022cb1db3.zip
riscv-openocd-480d4e17727864f75dc60e22cb1a42e022cb1db3.tar.gz
riscv-openocd-480d4e17727864f75dc60e22cb1a42e022cb1db3.tar.bz2
semihosting: fix accessing memory outside the bounds of the fn array
There is an accsess to wrong index, when arm semihosting_basedir command not used or basedir set to empty string. Signed-off-by: Erhan Kurubas <erhan.kurubas@espressif.com> Change-Id: I3afa049d74b30496f5c03ba4ef67431784f81bdc Fixes: ce5027ab019a ("semihosting: add semihosting_basedir command") Reviewed-on: https://review.openocd.org/c/openocd/+/7005 Tested-by: jenkins Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com> Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Diffstat (limited to 'src/target')
-rw-r--r--src/target/semihosting_common.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/target/semihosting_common.c b/src/target/semihosting_common.c
index 2df6e38..0a60eb1 100644
--- a/src/target/semihosting_common.c
+++ b/src/target/semihosting_common.c
@@ -877,9 +877,11 @@ int semihosting_common(struct target *target)
semihosting->result = -1;
semihosting->sys_errno = ENOMEM;
} else {
- strncpy((char *)fn, semihosting->basedir, basedir_len);
- if (fn[basedir_len - 1] != '/')
- fn[basedir_len++] = '/';
+ if (basedir_len > 0) {
+ strcpy((char *)fn, semihosting->basedir);
+ if (fn[basedir_len - 1] != '/')
+ fn[basedir_len++] = '/';
+ }
retval = target_read_memory(target, addr, 1, len, fn + basedir_len);
if (retval != ERROR_OK) {
free(fn);