module: Prevent crash by resetting local_err in module_load_qom_all()

Set local_err to NULL after it has been freed in error_report_err(). This
avoids triggering assert(*errp == NULL) failure in error_setv() when
local_err is reused in the loop.

Signed-off-by: Alexander Ivanov <alexander.ivanov@virtuozzo.com>
Reviewed-by: Claudio Fontana <cfontana@suse.de>
Reviewed-by: Denis V. Lunev <den@openvz.org>
Link: https://lore.kernel.org/r/20240809121340.992049-2-alexander.ivanov@virtuozzo.com
[Do the same by moving the declaration instead. - Paolo]
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Alexander Ivanov 2024-08-09 14:13:40 +02:00 committed by Paolo Bonzini
parent 7700d2293c
commit 940d802b24

View File

@ -354,13 +354,13 @@ int module_load_qom(const char *type, Error **errp)
void module_load_qom_all(void) void module_load_qom_all(void)
{ {
const QemuModinfo *modinfo; const QemuModinfo *modinfo;
Error *local_err = NULL;
if (module_loaded_qom_all) { if (module_loaded_qom_all) {
return; return;
} }
for (modinfo = module_info; modinfo->name != NULL; modinfo++) { for (modinfo = module_info; modinfo->name != NULL; modinfo++) {
Error *local_err = NULL;
if (!modinfo->objs) { if (!modinfo->objs) {
continue; continue;
} }