[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 11/16] gdbstub: Fix handle_query_xfer_auxv
From: |
Alex Bennée |
Subject: |
[PULL 11/16] gdbstub: Fix handle_query_xfer_auxv |
Date: |
Mon, 8 Feb 2021 12:38:16 +0000 |
From: Richard Henderson <richard.henderson@linaro.org>
The main problem was that we were treating a guest address
as a host address with a mere cast.
Use the correct interface for accessing guest memory. Do not
allow offset == auxv_len, which would result in an empty packet.
Fixes: 51c623b0de1 ("gdbstub: add support to Xfer:auxv:read: packet")
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20210128201831.534033-1-richard.henderson@linaro.org>
Message-Id: <20210202134001.25738-11-alex.bennee@linaro.org>
diff --git a/gdbstub.c b/gdbstub.c
index c7ca7e9f88..759bb00bcf 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -2245,7 +2245,6 @@ static void handle_query_xfer_auxv(GdbCmdContext
*gdb_ctx, void *user_ctx)
{
TaskState *ts;
unsigned long offset, len, saved_auxv, auxv_len;
- const char *mem;
if (gdb_ctx->num_params < 2) {
put_packet("E22");
@@ -2257,8 +2256,8 @@ static void handle_query_xfer_auxv(GdbCmdContext
*gdb_ctx, void *user_ctx)
ts = gdbserver_state.c_cpu->opaque;
saved_auxv = ts->info->saved_auxv;
auxv_len = ts->info->auxv_len;
- mem = (const char *)(saved_auxv + offset);
- if (offset > auxv_len) {
+
+ if (offset >= auxv_len) {
put_packet("E00");
return;
}
@@ -2269,12 +2268,20 @@ static void handle_query_xfer_auxv(GdbCmdContext
*gdb_ctx, void *user_ctx)
if (len < auxv_len - offset) {
g_string_assign(gdbserver_state.str_buf, "m");
- memtox(gdbserver_state.str_buf, mem, len);
} else {
g_string_assign(gdbserver_state.str_buf, "l");
- memtox(gdbserver_state.str_buf, mem, auxv_len - offset);
+ len = auxv_len - offset;
+ }
+
+ g_byte_array_set_size(gdbserver_state.mem_buf, len);
+ if (target_memory_rw_debug(gdbserver_state.g_cpu, saved_auxv + offset,
+ gdbserver_state.mem_buf->data, len, false)) {
+ put_packet("E14");
+ return;
}
+ memtox(gdbserver_state.str_buf,
+ (const char *)gdbserver_state.mem_buf->data, len);
put_packet_binary(gdbserver_state.str_buf->str,
gdbserver_state.str_buf->len, true);
}
--
2.20.1
- [PULL 00/16] testing, gdbstub and doc tweaks, Alex Bennée, 2021/02/08
- [PULL 02/16] tests/docker: Fix _get_so_libs() for docker-binfmt-image, Alex Bennée, 2021/02/08
- [PULL 05/16] tests/docker: preserve original name when copying libs, Alex Bennée, 2021/02/08
- [PULL 11/16] gdbstub: Fix handle_query_xfer_auxv,
Alex Bennée <=
- [PULL 04/16] tests/docker: make _copy_with_mkdir accept missing files, Alex Bennée, 2021/02/08
- [PULL 08/16] configure: make version_ge more tolerant of shady version input, Alex Bennée, 2021/02/08
- [PULL 03/16] tests/docker: Fix typo in help message, Alex Bennée, 2021/02/08
- [PULL 12/16] tests/tcg: Replace /bin/true by true (required on macOS), Alex Bennée, 2021/02/08
- [PULL 07/16] tests/docker: add a docker-exec-copy-test, Alex Bennée, 2021/02/08
- [PULL 06/16] tests/docker: alias docker-help target for consistency, Alex Bennée, 2021/02/08
- [PULL 13/16] scripts/mtest2make.py: export all-%s-targets variable and use it, Alex Bennée, 2021/02/08
- [PULL 01/16] tests/acceptance: Increase the timeout in the replay tests, Alex Bennée, 2021/02/08
- [PULL 10/16] tests/tcg: don't silently skip the gdb tests, Alex Bennée, 2021/02/08
- [PULL 09/16] configure: bump the minimum gdb version for check-tcg to 9.1, Alex Bennée, 2021/02/08