[PATCH] gdbstub: Fix SEGFAULT in find_cpu_clusters()

Nikita Shubin posted 1 patch 8 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20230914122558.2379-1-nikita.shubin@maquefel.me
Maintainers: "Alex Bennée" <alex.bennee@linaro.org>, "Philippe Mathieu-Daudé" <philmd@linaro.org>
gdbstub/softmmu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] gdbstub: Fix SEGFAULT in find_cpu_clusters()
Posted by Nikita Shubin 8 months ago
From: Nikita Shubin <n.shubin@yadro.com>

target_xml is a dynamic GString, use NULL to initialize it.

Fixes: 56e534bd11 ("gdbstub: refactor get_feature_xml")

Signed-off-by: Nikita Shubin <n.shubin@yadro.com>
---
Observed with:
build-qemu/qemu-system-riscv64 -M sifive_u -bios none -nographic -s
Segmentation fault
---
 gdbstub/softmmu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdbstub/softmmu.c b/gdbstub/softmmu.c
index 9f0b8b5497..42645d2220 100644
--- a/gdbstub/softmmu.c
+++ b/gdbstub/softmmu.c
@@ -292,7 +292,7 @@ static int find_cpu_clusters(Object *child, void *opaque)
         assert(cluster->cluster_id != UINT32_MAX);
         process->pid = cluster->cluster_id + 1;
         process->attached = false;
-        process->target_xml[0] = '\0';
+        process->target_xml = NULL;
 
         return 0;
     }
-- 
2.39.2
Re: [PATCH] gdbstub: Fix SEGFAULT in find_cpu_clusters()
Posted by Philippe Mathieu-Daudé 8 months ago
Hi Nikita,

On 14/9/23 14:25, Nikita Shubin wrote:
> From: Nikita Shubin <n.shubin@yadro.com>
> 
> target_xml is a dynamic GString, use NULL to initialize it.
> 
> Fixes: 56e534bd11 ("gdbstub: refactor get_feature_xml")
> 
> Signed-off-by: Nikita Shubin <n.shubin@yadro.com>
> ---
> Observed with:
> build-qemu/qemu-system-riscv64 -M sifive_u -bios none -nographic -s
> Segmentation fault
> ---
>   gdbstub/softmmu.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/gdbstub/softmmu.c b/gdbstub/softmmu.c
> index 9f0b8b5497..42645d2220 100644
> --- a/gdbstub/softmmu.c
> +++ b/gdbstub/softmmu.c
> @@ -292,7 +292,7 @@ static int find_cpu_clusters(Object *child, void *opaque)
>           assert(cluster->cluster_id != UINT32_MAX);
>           process->pid = cluster->cluster_id + 1;
>           process->attached = false;
> -        process->target_xml[0] = '\0';
> +        process->target_xml = NULL;

Yes, good catch. Akihiko also posted the same fix 2 days ago:
https://lore.kernel.org/qemu-devel/20230912065811.27796-2-akihiko.odaki@daynix.com/

>   
>           return 0;
>       }