rtos/linux: fix name overwrite in linux_thread_extra_info()
commit 908ee4dc96 ("build: remove clang
unused variable assignment warnings") introduced an error:
```
- tmp_str_ptr += sprintf(tmp_str_ptr, "%s", name);
+ sprintf(tmp_str_ptr, "%s", name);
sprintf(tmp_str_ptr, "%s", temp->name);
```
This results in `name` being overwritten by `temp->name`.
Fix this, adding OOM handling along the way.
Change-Id: Id41f73247c3f7e6194d7c92187ad3163a9ea6c89
Signed-off-by: Evgeniy Naydanov <evgeniy.naydanov@syntacore.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/8761
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
committed by
Antonio Borneo
parent
d892a4d763
commit
16c6497a89
@@ -1120,23 +1120,13 @@ static int linux_thread_extra_info(struct target *target,
|
||||
|
||||
while (temp) {
|
||||
if (temp->threadid == threadid) {
|
||||
char *pid = " PID: ";
|
||||
char *pid_current = "*PID: ";
|
||||
char *name = "Name: ";
|
||||
int str_size = strlen(pid) + strlen(name);
|
||||
char *tmp_str = calloc(1, str_size + 50);
|
||||
char *tmp_str_ptr = tmp_str;
|
||||
|
||||
/* discriminate current task */
|
||||
if (temp->status == 3)
|
||||
tmp_str_ptr += sprintf(tmp_str_ptr, "%s",
|
||||
pid_current);
|
||||
else
|
||||
tmp_str_ptr += sprintf(tmp_str_ptr, "%s", pid);
|
||||
|
||||
tmp_str_ptr += sprintf(tmp_str_ptr, "%d, ", (int)temp->pid);
|
||||
sprintf(tmp_str_ptr, "%s", name);
|
||||
sprintf(tmp_str_ptr, "%s", temp->name);
|
||||
char *tmp_str = alloc_printf("%cPID: %" PRIu32 ", Name: %s",
|
||||
temp->status == 3 ? '*' : ' ',
|
||||
temp->pid, temp->name);
|
||||
if (!tmp_str) {
|
||||
LOG_ERROR("Out of memory");
|
||||
return ERROR_FAIL;
|
||||
}
|
||||
char *hex_str = calloc(1, strlen(tmp_str) * 2 + 1);
|
||||
size_t pkt_len = hexify(hex_str, (const uint8_t *)tmp_str,
|
||||
strlen(tmp_str), strlen(tmp_str) * 2 + 1);
|
||||
|
||||
Reference in New Issue
Block a user