]> git.ipfire.org Git - thirdparty/qemu.git/commit
hw/audio/hda-codec: fix multiplication overflow
authorVolker Rümelin <vr_qemu@t-online.de>
Sun, 5 Nov 2023 17:25:51 +0000 (18:25 +0100)
committerMichael Tokarev <mjt@tls.msk.ru>
Tue, 5 Dec 2023 09:32:36 +0000 (12:32 +0300)
commit59de6e246fc7504ae78460df81e97d17f8fef2c6
tree1c4505b5adb82f6dde6d1e85df6d62e502a38ad9
parent66f14b70fe1b23ccf72a17c3324d95b38ee45a21
hw/audio/hda-codec: fix multiplication overflow

After a relatively short time, there is an multiplication overflow
when multiplying (now - buft_start) with hda_bytes_per_second().
While the uptime now - buft_start only overflows after 2**63 ns
= 292.27 years, this happens hda_bytes_per_second() times faster
with the multiplication. At 44100 samples/s * 2 channels
* 2 bytes/channel = 176400 bytes/s that is 14.52 hours. After the
multiplication overflow the affected audio stream stalls.

Replace the multiplication and following division with muldiv64()
to prevent a multiplication overflow.

Fixes: 280c1e1cdb ("audio/hda: create millisecond timers that handle IO")
Reported-by: M_O_Bz <m_o_bz@163.com>
Signed-off-by: Volker Rümelin <vr_qemu@t-online.de>
Message-Id: <20231105172552.8405-1-vr_qemu@t-online.de>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
(cherry picked from commit 74e8593e7e51d6b11ae9c56a3f4e7bb714bac4ec)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
hw/audio/hda-codec.c