When baudbase is zero (e.g. not yet configured), the division baudbase /
divider produces zero. This results in NANOSECONDS_PER_SECOND / speed
yielding infinity, making char_transmit_time infinite and stalling
transmission.
Fall back to the same 3500 baud default used for a zero divisor.
Fixes: 96651db423a0 ("serial: add "baudbase" property")
Reported-by: Pavee Hui <[email protected]>
Signed-off-by: Marc-André Lureau <[email protected]>
---
hw/char/serial.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 4339562ab003..44bf9fa0b25b 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -178,6 +178,9 @@ static void serial_update_parameters(SerialState *s)
frame_size += data_bits + stop_bits;
/* Zero divisor should give about 3500 baud */
speed = (s->divider == 0) ? 3500 : (float) s->baudbase / s->divider;
+ if (speed <= 0) {
+ speed = 3500;
+ }
ssp.speed = speed;
ssp.parity = parity;
ssp.data_bits = data_bits;
--
2.56.0.rc0.29.g47ce80527c56