aboutsummaryrefslogtreecommitdiff
path: root/drivers/serial/serial-uclass.c
diff options
context:
space:
mode:
authorPatrick Delaunay <patrick.delaunay@st.com>2018-08-03 13:38:43 +0200
committerTom Rini <trini@konsulko.com>2018-09-10 20:20:34 -0400
commitd3bb7858545fa54ff3c591570f1d36234ecde2bf (patch)
tree38ccac62ceb5957d25a71707c3423b2fde263d9a /drivers/serial/serial-uclass.c
parentfe852bc109f13664b9d733501f2c4ae33a4c7d3e (diff)
downloadu-boot-d3bb7858545fa54ff3c591570f1d36234ecde2bf.zip
u-boot-d3bb7858545fa54ff3c591570f1d36234ecde2bf.tar.gz
u-boot-d3bb7858545fa54ff3c591570f1d36234ecde2bf.tar.bz2
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 <patrick.delaunay@st.com> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/serial/serial-uclass.c')
-rw-r--r--drivers/serial/serial-uclass.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/serial/serial-uclass.c b/drivers/serial/serial-uclass.c
index 321d23e..4121a37 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;