Re: [PATCH] serial: lpuart: Avoid division by zero when requested baudrate is

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, May 14, 2018 at 12:14 AM, Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> wrote:
> On Tue, May 08, 2018 at 02:15:02PM -0700, Andrey Smirnov wrote:
>> With serdev device support added there's now a corner case where:
>>
>>  1. There is a DT node for a serdev device on one of the UARTs
>>  2. There is no driver that binds against serdev device's compatibility
>>     string
>>
>> with 1 and 2 being true it is possible to end up in a situation where
>> a particualr UART has not been initalized to any baudrate when
>> clock_notifier_call_chain() gets called. This effectively translates
>> to
>>
>>       set_baudrate(uart, 0);
>>
>> which for LPUART driver result in a division by zero.
>
> This probably leads to a division by zero for most drivers since
> dividing by the baudrate is a common pattern. Wouldn't it be better to
> catch this is console_set_baudrate()?
>

It would, but none of the drivers that register a callback with
clock_register_client() (serial_imx.c, serial_auart.c, stm-serial.c,
serial_lpuart.c and serial_cadence.c) use console_set_badrate() and
instead call ->setbrg() directly. Probably because
console_set_baudrate() also handles interactive baudrate switch for
f_active console devices. Serial_imx.c doesn't preform any division,
so it is safe and I can go through the rest of them to add appropriate
checks? Another option is probably to try to come up with common
clock_register_client() infrastructure(since all of the handlers are
the same) and keep that check there.

Let me know if you want me to do either.

Thanks,
Andrey Smirnov

_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux