[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 24/29] target/ppc: Fix decrementer time underflow and infinite tim
From: |
Daniel Henrique Barboza |
Subject: |
[PULL 24/29] target/ppc: Fix decrementer time underflow and infinite timer loop |
Date: |
Sat, 10 Jun 2023 10:31:27 -0300 |
From: Nicholas Piggin <npiggin@gmail.com>
It is possible to store a very large value to the decrementer that it
does not raise the decrementer exception so the timer is scheduled, but
the next time value wraps and is treated as in the past.
This can occur if (u64)-1 is stored on a zero-triggered exception, or
(u64)-1 is stored twice on an underflow-triggered exception, for
example.
If such a value is set in DECAR, it gets stored to the decrementer by
the timer function, which then immediately causes another timer, which
hangs QEMU.
Clamp the decrementer to the implemented width, and use that as the
value for the timer calculation, effectively preventing this overflow.
Reported-by: sdicaro@DDCI.com
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
Message-Id: <20230530131214.373524-1-npiggin@gmail.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
hw/ppc/ppc.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c
index 4e816c68c7..d80b0adc6c 100644
--- a/hw/ppc/ppc.c
+++ b/hw/ppc/ppc.c
@@ -798,6 +798,8 @@ static void __cpu_ppc_store_decr(PowerPCCPU *cpu, uint64_t
*nextp,
int64_t signed_decr;
/* Truncate value to decr_width and sign extend for simplicity */
+ value = extract64(value, 0, nr_bits);
+ decr = extract64(decr, 0, nr_bits);
signed_value = sextract64(value, 0, nr_bits);
signed_decr = sextract64(decr, 0, nr_bits);
--
2.40.1
- [PULL 13/29] target/ppc: Remove single use function, (continued)
- [PULL 13/29] target/ppc: Remove single use function, Daniel Henrique Barboza, 2023/06/10
- [PULL 15/29] target/ppc: Move ppcemb_tlb_search() to mmu_common.c, Daniel Henrique Barboza, 2023/06/10
- [PULL 16/29] target/ppc: Remove some unneded line breaks, Daniel Henrique Barboza, 2023/06/10
- [PULL 17/29] target/ppc: Simplify ppcemb_tlb_search(), Daniel Henrique Barboza, 2023/06/10
- [PULL 18/29] target/ppc: Change ppcemb_tlb_check() to return bool, Daniel Henrique Barboza, 2023/06/10
- [PULL 19/29] target/ppc: Eliminate goto in mmubooke_check_tlb(), Daniel Henrique Barboza, 2023/06/10
- [PULL 20/29] target/ppc: Fix lqarx to set cpu_reserve, Daniel Henrique Barboza, 2023/06/10
- [PULL 22/29] target/ppc: Remove larx/stcx. memory barrier semantics, Daniel Henrique Barboza, 2023/06/10
- [PULL 23/29] target/ppc: Rework store conditional to avoid branch, Daniel Henrique Barboza, 2023/06/10
- [PULL 21/29] target/ppc: Ensure stcx size matches larx, Daniel Henrique Barboza, 2023/06/10
- [PULL 24/29] target/ppc: Fix decrementer time underflow and infinite timer loop,
Daniel Henrique Barboza <=
- [PULL 25/29] target/ppc: Decrementer fix BookE semantics, Daniel Henrique Barboza, 2023/06/10
- [PULL 26/29] hw/ppc/openpic: Do not open-code ROUND_UP() macro, Daniel Henrique Barboza, 2023/06/10
- [PULL 27/29] tests/avocado/tuxrun_baselines: Fix ppc64 tests for binaries without slirp, Daniel Henrique Barboza, 2023/06/10
- [PULL 28/29] target/ppc: Implement gathering irq statistics, Daniel Henrique Barboza, 2023/06/10
- [PULL 29/29] hw/ppc/Kconfig: MAC_NEWWORLD should always select USB_OHCI_PCI, Daniel Henrique Barboza, 2023/06/10
- Re: [PULL 00/29] ppc queue, Richard Henderson, 2023/06/10