On Tue, Dec 6, 2016 at 1:31 AM, Peter Maydell <peter.mayd...@linaro.org> wrote:
> On 5 December 2016 at 18:35, Alistair Francis
> <alistair.fran...@xilinx.com> wrote:
>> The Cadence UART device emulator calculates speed by dividing the
>> baud rate by a 'baud rate generator' & 'baud rate divider' value.
>> The device specification defines these register values to be
>> non-zero and within certain limits. Checks were recently added when
>> writing to these registers but not when restoring from migration.
>>
>> This patch adds checks when restoring from migration to avoid divide by
>> zero errors.
>>
>> Reported-by: Huawei PSIRT <ps...@huawei.com>
>> Signed-off-by: Alistair Francis <alistair.fran...@xilinx.com>
>> ---
>> It would be nice to squeeze this into 2.8 if possible.
>>
>> V3:
>>  - Fix broken migration logic
>>  - Manually double checked and it passes migration.
>> V2:
>>  - Abort the migration if the data is invalid
>>
>>  hw/char/cadence_uart.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
>> index 0215d65..ce9063b 100644
>> --- a/hw/char/cadence_uart.c
>> +++ b/hw/char/cadence_uart.c
>> @@ -502,6 +502,13 @@ static int cadence_uart_post_load(void *opaque, int 
>> version_id)
>>  {
>>      CadenceUARTState *s = opaque;
>>
>> +    /* Ensure these two aren't invalid numbers */
>> +    if (s->r[R_BRGR] <= 1 || s->r[R_BRGR] & ~0xFFFF ||
>> +        s->r[R_BDIV] <= 3 || s->r[R_BDIV] & ~0xFF) {
>
> The uart_write() code says BRGR == 1 is valid, but
> this code says it isn't. Which is correct?

1 is valid, it is bypass mode, fixing.

Thanks,

Alistair

>
> thanks
> -- PMM

Reply via email to