acpi/erst: fix fallthrough code upon validation failure
At any step when any validation fail in check_erst_backend_storage(), there is no need to continue further through other validation checks. Further, by continuing even when record_size is 0, we run the risk of triggering a divide by zero error if we continued with other validation checks. Hence, we should simply return from this function upon validation failure. CC: Peter Maydell <peter.maydell@linaro.org> CC: Eric DeVolder <eric.devolder@oracle.com> Signed-off-by: Ani Sinha <ani@anisinha.ca> Message-Id: <20220513141005.1929422-1-ani@anisinha.ca> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Eric DeVolder <eric.devolder@oracle.com>
This commit is contained in:
parent
9ce305c8be
commit
8c97e4deec
|
@ -440,6 +440,7 @@ static void check_erst_backend_storage(ERSTDeviceState *s, Error **errp)
|
||||||
(record_size >= 4096) /* PAGE_SIZE */
|
(record_size >= 4096) /* PAGE_SIZE */
|
||||||
)) {
|
)) {
|
||||||
error_setg(errp, "ERST record_size %u is invalid", record_size);
|
error_setg(errp, "ERST record_size %u is invalid", record_size);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Validity check header */
|
/* Validity check header */
|
||||||
|
@ -450,6 +451,7 @@ static void check_erst_backend_storage(ERSTDeviceState *s, Error **errp)
|
||||||
(le16_to_cpu(header->reserved) == 0)
|
(le16_to_cpu(header->reserved) == 0)
|
||||||
)) {
|
)) {
|
||||||
error_setg(errp, "ERST backend storage header is invalid");
|
error_setg(errp, "ERST backend storage header is invalid");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check storage_size against record_size */
|
/* Check storage_size against record_size */
|
||||||
|
@ -457,6 +459,7 @@ static void check_erst_backend_storage(ERSTDeviceState *s, Error **errp)
|
||||||
(record_size > s->storage_size)) {
|
(record_size > s->storage_size)) {
|
||||||
error_setg(errp, "ACPI ERST requires storage size be multiple of "
|
error_setg(errp, "ACPI ERST requires storage size be multiple of "
|
||||||
"record size (%uKiB)", record_size);
|
"record size (%uKiB)", record_size);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Compute offset of first and last record storage slot */
|
/* Compute offset of first and last record storage slot */
|
||||||
|
|
Loading…
Reference in New Issue