Re: [patch added to 3.12-stable] tty/serial: atmel: fix race condition (TX+DMA)

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

 



On 04/10/2017, 03:47 PM, Richard Genoud wrote:
> On 10/04/2017 14:59, Jiri Slaby wrote:
>> From: Richard Genoud <richard.genoud@xxxxxxxxx>
>>
>> This patch has been added to the 3.12 stable tree. If you have any
>> objections, please let us know.
>>
>> ===============
>>
>> commit 31ca2c63fdc0aee725cbd4f207c1256f5deaabde upstream.
>>
>> If uart_flush_buffer() is called between atmel_tx_dma() and
>> atmel_complete_tx_dma(), the circular buffer has been cleared, but not
>> atmel_port->tx_len.
>> That leads to a circular buffer overflow (dumping (UART_XMIT_SIZE -
>> atmel_port->tx_len) bytes).
>>
>> Tested-by: Nicolas Ferre <nicolas.ferre@xxxxxxxxxxxxx>
>> Signed-off-by: Richard Genoud <richard.genoud@xxxxxxxxx>
>> Signed-off-by: Jiri Slaby <jslaby@xxxxxxx>
>> ---
>>  drivers/tty/serial/atmel_serial.c | 5 +++++
>>  1 file changed, 5 insertions(+)
>>
>> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
>> index ab2e22bf54fd..0e0023f7c18d 100644
>> --- a/drivers/tty/serial/atmel_serial.c
>> +++ b/drivers/tty/serial/atmel_serial.c
>> @@ -1690,6 +1690,11 @@ static void atmel_flush_buffer(struct uart_port *port)
>>  		UART_PUT_TCR(port, 0);
>>  		atmel_port->pdc_tx.ofs = 0;
>>  	}
>> +	/*
>> +	 * in uart_flush_buffer(), the xmit circular buffer has just
>> +	 * been cleared, so we have to reset tx_len accordingly.
>> +	 */
>> +	atmel_port->tx_len = 0;
>>  }
>>  
>>  /*
>>
> Hi,
> This won't compile on 3.12 kernel since ->tx_len doesn't exist yet.
> 
> Here is the backported version of this patch:

Ok, in the meantime I dropped it and now applied the backport. Thanks!

-- 
js
suse labs



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]