summary refs log tree commit diff stats
path: root/hw
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2024-07-10 11:56:35 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2024-07-16 18:18:24 +0200
commitc9669d6d5741f7aa86e160c5e42979f90d25d168 (patch)
tree54ccd4eb88188508769dcdecf5df104ca7b340cc /hw
parentde12ebfdabe224597f624827ad57348b83e7d88a (diff)
downloadfocaccia-qemu-c9669d6d5741f7aa86e160c5e42979f90d25d168.tar.gz
focaccia-qemu-c9669d6d5741f7aa86e160c5e42979f90d25d168.zip
hpet: fix clamping of period
When writing a new period, the clamping should use a maximum value
rather tyhan a bit mask.  Also, when writing the high bits new_val
is shifted right by 32, so the maximum allowed period should also
be shifted right.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/timer/hpet.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c
index 01efe4885d..ad881448bf 100644
--- a/hw/timer/hpet.c
+++ b/hw/timer/hpet.c
@@ -548,7 +548,9 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
                  * FIXME: Clamp period to reasonable min value?
                  * Clamp period to reasonable max value
                  */
-                new_val &= (timer->config & HPET_TN_32BIT ? ~0u : ~0ull) >> 1;
+                if (timer->config & HPET_TN_32BIT) {
+                    new_val = MIN(new_val, ~0u >> 1);
+                }
                 timer->period =
                     (timer->period & 0xffffffff00000000ULL) | new_val;
             }
@@ -567,7 +569,7 @@ static void hpet_ram_write(void *opaque, hwaddr addr,
                  * FIXME: Clamp period to reasonable min value?
                  * Clamp period to reasonable max value
                  */
-                new_val &= (timer->config & HPET_TN_32BIT ? ~0u : ~0ull) >> 1;
+                new_val = MIN(new_val, ~0u >> 1);
                 timer->period =
                     (timer->period & 0xffffffffULL) | new_val << 32;
                 }