From mboxrd@z Thu Jan 1 00:00:00 1970 From: Frans Klaver Subject: Re: [PATCH 1/3] tty: omap-serial: prevent division by zero Date: Tue, 29 Jul 2014 17:00:14 +0200 Message-ID: <20140729150014.GC32689@ci00147.xsens-tech.local> References: <1406645577-18620-1-git-send-email-frans.klaver@xsens.com> <1406645577-18620-2-git-send-email-frans.klaver@xsens.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Return-path: Content-Disposition: inline In-Reply-To: <1406645577-18620-2-git-send-email-frans.klaver-MHHw4NDrbWwAvxtiuMwx3w@public.gmane.org> Sender: devicetree-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: linux-serial-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Cc: Rob Herring , Pawel Moll , Mark Rutland , Ian Campbell , Kumar Gala , Greg Kroah-Hartman , Jiri Slaby , devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: devicetree@vger.kernel.org Sorry, missed some CC's in git send-email. On Tue, Jul 29, 2014 at 04:52:55PM +0200, Frans Klaver wrote: > If the chosen baud rate is large enough (e.g. 3.5 megabaud), the > calculated n13 and n16 values in serial_omap_baud_is_mode16 may become > 0. This causes a division by zero when calculating the difference > between calculated and desired baud rates. To prevent this, cap n13 and > n16 on 1. > > Signed-off-by: Frans Klaver > --- > drivers/tty/serial/omap-serial.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c > index d017cec..e454b7c 100644 > --- a/drivers/tty/serial/omap-serial.c > +++ b/drivers/tty/serial/omap-serial.c > @@ -254,8 +254,16 @@ serial_omap_baud_is_mode16(struct uart_port *port, unsigned int baud) > { > unsigned int n13 = port->uartclk / (13 * baud); > unsigned int n16 = port->uartclk / (16 * baud); > - int baudAbsDiff13 = baud - (port->uartclk / (13 * n13)); > - int baudAbsDiff16 = baud - (port->uartclk / (16 * n16)); > + int baudAbsDiff13; > + int baudAbsDiff16; > + > + if (n13 == 0) > + n13 = 1; > + if (n16 == 0) > + n16 = 1; > + > + baudAbsDiff13 = baud - (port->uartclk / (13 * n13)); > + baudAbsDiff16 = baud - (port->uartclk / (16 * n16)); > if (baudAbsDiff13 < 0) > baudAbsDiff13 = -baudAbsDiff13; > if (baudAbsDiff16 < 0) > -- > 1.9.3 > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html