[PATCH] target/ppc: Add lower bound check for watchdogNumber
Chinmay Rath <[email protected]>
| Newsgroups | gmane.comp.emulators.qemu |
|---|---|
| Message-ID | <[email protected]> |
Add missing lower bound check for H_WATCHDOG H_CALL's watchdogNumber parameter as per PAPR documentation ver 12.10.00 section 14.15.5 'H_WATCHDOG'. Closes : https://gitlab.com/qemu-project/qemu/-/work_items/3600 Signed-off-by: Chinmay Rath <[email protected]> --- hw/watchdog/spapr_watchdog.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hw/watchdog/spapr_watchdog.c b/hw/watchdog/spapr_watchdog.c index 5b3f50de3a..5d7478e833 100644 --- a/hw/watchdog/spapr_watchdog.c +++ b/hw/watchdog/spapr_watchdog.c @@ -145,7 +145,7 @@ static target_ulong h_watchdog(PowerPCCPU *cpu, switch (operation) { case PSERIES_WDTF_OP_START: - if (watchdogNumber > ARRAY_SIZE(spapr->wds)) { + if (watchdogNumber < 1 || watchdogNumber > ARRAY_SIZE(spapr->wds)) { return H_P2; } if (timeoutInMs <= WDT_MIN_TIMEOUT) { @@ -170,7 +170,8 @@ static target_ulong h_watchdog(PowerPCCPU *cpu, case PSERIES_WDTF_OP_STOP: if (watchdogNumber == PSERIES_WDT_STOP_ALL) { ret = watchdog_stop_all(spapr); - } else if (watchdogNumber <= ARRAY_SIZE(spapr->wds)) { + } else if (watchdogNumber > 0 && + watchdogNumber <= ARRAY_SIZE(spapr->wds)) { ret = watchdog_stop(watchdogNumber, &spapr->wds[watchdogNumber - 1]); } else { @@ -184,7 +185,7 @@ static target_ulong h_watchdog(PowerPCCPU *cpu, trace_spapr_watchdog_query(args[0]); break; case PSERIES_WDTF_OP_QUERY_LPM: - if (watchdogNumber > ARRAY_SIZE(spapr->wds)) { + if (watchdogNumber < 1 || watchdogNumber > ARRAY_SIZE(spapr->wds)) { return H_P2; } args[0] = PSERIES_WDTQL_QUERY_NOT_STOPPED; -- 2.55.0