From d75d630976a31350e025c6085982cb5ff4b16cd9 Mon Sep 17 00:00:00 2001 From: waltje Date: Sun, 7 May 2017 20:26:39 -0400 Subject: [PATCH] Added check for invalid baudrate divisor. --- src/serial.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/serial.c b/src/serial.c index 840686808..1d401ad00 100644 --- a/src/serial.c +++ b/src/serial.c @@ -33,7 +33,7 @@ * * Based on the 86Box serial port driver as a framework. * - * Version: @(#)serial.c 1.0.3 2017/05/06 + * Version: @(#)serial.c 1.0.4 2017/05/07 * * Author: Fred N. van Kempen, * Copyright 2017 Fred N. van Kempen. @@ -283,13 +283,18 @@ serial_write(uint16_t addr, uint8_t val, void *priv) if ((sp->lcr & LCR_DLAB) && !(val & LCR_DLAB)) { /* We dropped DLAB, so handle baudrate. */ baud = ((sp->dlab2 << 8) | sp->dlab1); - speed = 115200UL/baud; + if (baud > 0) { + speed = 115200UL/baud; #if 0 - pclog("Serial%d: new divisor %u, baudrate %ld\n", + pclog("Serial%d: divisor %u, baudrate %ld\n", sp->port, baud, speed); #endif - if (sp->bh != NULL) - bhtty_speed((BHTTY *)sp->bh, speed); + if (sp->bh != NULL) + bhtty_speed((BHTTY *)sp->bh, speed); + } else { + pclog("Serial%d: divisor %u invalid!\n", + sp->port, baud); + } } wl = (val & LCR_WLS) + 5; /* databits */ sb = (val & LCR_SBS) ? 2 : 1; /* stopbits */