Be slightly more paranoid about using the divisor in a division and

the calculated baudrate. Neither should be 0.
This commit is contained in:
Marcel Moolenaar 2004-11-15 00:00:24 +00:00
parent a0c88fb1d9
commit bfa307a39c

View File

@ -468,7 +468,7 @@ static int
ns8250_bus_ioctl(struct uart_softc *sc, int request, intptr_t data)
{
struct uart_bas *bas;
int divisor, error;
int baudrate, divisor, error;
uint8_t efr, lcr;
bas = &sc->sc_bas;
@ -522,7 +522,11 @@ ns8250_bus_ioctl(struct uart_softc *sc, int request, intptr_t data)
uart_barrier(bas);
uart_setreg(bas, REG_LCR, lcr);
uart_barrier(bas);
*(int*)data = bas->rclk / divisor / 16;
baudrate = (divisor > 0) ? bas->rclk / divisor / 16 : 0;
if (baudrate > 0)
*(int*)data = baudrate;
else
error = ENXIO;
break;
default:
error = EINVAL;