diff options
| author | Patrick Delaunay <[email protected]> | 2018-08-03 13:38:43 +0200 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2018-09-10 20:20:34 -0400 |
| commit | d3bb7858545fa54ff3c591570f1d36234ecde2bf (patch) | |
| tree | 38ccac62ceb5957d25a71707c3423b2fde263d9a | |
| parent | fe852bc109f13664b9d733501f2c4ae33a4c7d3e (diff) | |
serial: protect access to serial rx buffer
Add test to avoid access to rx buffer when this buffer is empty.
In this case directly call getc() function to avoid issue when tstc()
is not called.
Signed-off-by: Patrick Delaunay <[email protected]>
Reviewed-by: Simon Glass <[email protected]>
| -rw-r--r-- | drivers/serial/serial-uclass.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c index 321d23ee93b..4121a37aa80 100644 --- a/drivers/serial/serial-uclass.c +++ b/drivers/serial/serial-uclass.c @@ -228,6 +228,9 @@ static int _serial_getc(struct udevice *dev) struct serial_dev_priv *upriv = dev_get_uclass_priv(dev); char val; + if (upriv->rd_ptr == upriv->wr_ptr) + return __serial_getc(dev); + val = upriv->buf[upriv->rd_ptr++]; upriv->rd_ptr %= CONFIG_SERIAL_RX_BUFFER_SIZE; |
