Be slightly more paranoid about using the divisor in a division and
the calculated baudrate. Neither should be 0.
This commit is contained in:
parent
a0c88fb1d9
commit
bfa307a39c
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user