On Wed, 5 Nov 2025 21:44:50 +1000 Gavin Shan <[email protected]> wrote:
> For one particular error (Error), we can't call error_setg() for twice. > Otherwise, the assert(*errp == NULL) will be triggered unexpectedly in > error_setv(). In ghes_record_cper_errors(), get_ghes_source_offsets() > can return a error initialized by error_setg(). Without bailing on > this error, it can call into the second error_setg() due to the > unexpected value from the read acknowledgement register. > > Bail early in ghes_record_cper_errors() when error is received from > get_ghes_source_offsets() to avoid the exception. > > Signed-off-by: Gavin Shan <[email protected]> Reviewed-by: Igor Mammedov <[email protected]> > --- > hw/acpi/ghes.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/hw/acpi/ghes.c b/hw/acpi/ghes.c > index 527b85c8d8..055e5d719a 100644 > --- a/hw/acpi/ghes.c > +++ b/hw/acpi/ghes.c > @@ -513,6 +513,9 @@ void ghes_record_cper_errors(AcpiGhesState *ags, const > void *cper, size_t len, > } else { > get_ghes_source_offsets(source_id, le64_to_cpu(ags->hest_addr_le), > &cper_addr, &read_ack_register_addr, errp); > + if (*errp) { > + return; > + } > } > > cpu_physical_memory_read(read_ack_register_addr,
