diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2024-07-10 11:56:35 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2024-07-16 18:18:24 +0200 |
commit | c9669d6d5741f7aa86e160c5e42979f90d25d168 (patch) | |
tree | 54ccd4eb88188508769dcdecf5df104ca7b340cc /hw/timer | |
parent | de12ebfdabe224597f624827ad57348b83e7d88a (diff) | |
download | qemu-c9669d6d5741f7aa86e160c5e42979f90d25d168.zip qemu-c9669d6d5741f7aa86e160c5e42979f90d25d168.tar.gz qemu-c9669d6d5741f7aa86e160c5e42979f90d25d168.tar.bz2 |
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/timer')
-rw-r--r-- | hw/timer/hpet.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/hw/timer/hpet.c b/hw/timer/hpet.c index 01efe48..ad88144 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; } |