Skip to content

Commit

Permalink
gdbstub: fix vCont packet handling when no thread is specified
Browse files Browse the repository at this point in the history
The vCont packet accepts a series of actions, each being applied on a
given thread ID. Giving no thread ID for an action is valid and means
"all threads".

This commit fixes vCont packets being incorrectly rejected when no
thread ID was given for an action.

In multiprocess mode, the GDB Remote Protocol specification is unclear
on what "all threads" means. We choose to apply the action on all
threads of all attached processes.

This commit is based on the initial fix by Lucien Murray-Pitts.

Fixes: e40e520
Reported-by: Lucien Murray-Pitts <lucienmp_antispam@yahoo.com>
Reported-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Luc Michel <luc.michel@greensocs.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20190325110452.6756-1-luc.michel@greensocs.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
  • Loading branch information
Luc Michel authored and pm215 committed Mar 26, 2019
1 parent c8877d0 commit c99ef79
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions gdbstub.c
Expand Up @@ -1152,6 +1152,7 @@ static int gdb_handle_vcont(GDBState *s, const char *p)
uint32_t pid, tid;
GDBProcess *process;
CPUState *cpu;
GDBThreadIdKind kind;
#ifdef CONFIG_USER_ONLY
int max_cpus = 1; /* global variable max_cpus exists only in system mode */

Expand Down Expand Up @@ -1194,12 +1195,21 @@ static int gdb_handle_vcont(GDBState *s, const char *p)
goto out;
}

if (*p++ != ':') {
if (*p == '\0' || *p == ';') {
/*
* No thread specifier, action is on "all threads". The
* specification is unclear regarding the process to act on. We
* choose all processes.
*/
kind = GDB_ALL_PROCESSES;
} else if (*p++ == ':') {
kind = read_thread_id(p, &p, &pid, &tid);
} else {
res = -ENOTSUP;
goto out;
}

switch (read_thread_id(p, &p, &pid, &tid)) {
switch (kind) {
case GDB_READ_THREAD_ERR:
res = -EINVAL;
goto out;
Expand Down

0 comments on commit c99ef79

Please sign in to comment.