[rtems commit] termios: Fix infinite loop in receive path
Sebastian Huber
sebh at rtems.org
Tue Feb 28 08:56:32 UTC 2017
Module: rtems
Branch: 4.11
Commit: a27128c5dce5d2fcd482a7914750539f8745ff88
Changeset: http://git.rtems.org/rtems/commit/?id=a27128c5dce5d2fcd482a7914750539f8745ff88
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Fri Feb 24 10:29:05 2017 +0100
termios: Fix infinite loop in receive path
In canonical mode, the raw input buffer or the canonical buffer may
overflow without an end of line. Avoid an infinite loop in this case.
Update #2915.
---
cpukit/libcsupport/src/termios.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/cpukit/libcsupport/src/termios.c b/cpukit/libcsupport/src/termios.c
index 1a7562e..a9603e1 100644
--- a/cpukit/libcsupport/src/termios.c
+++ b/cpukit/libcsupport/src/termios.c
@@ -1521,13 +1521,17 @@ fillBufferQueue (struct rtems_termios_tty *tty)
/*
* Wait for characters
*/
- if ( wait ) {
- rtems_status_code sc;
+ if (wait) {
+ if (tty->ccount < CBUFSIZE - 1) {
+ rtems_status_code sc;
- sc = rtems_semaphore_obtain(
- tty->rawInBuf.Semaphore, tty->rawInBufSemaphoreOptions, timeout);
- if (sc != RTEMS_SUCCESSFUL)
+ sc = rtems_semaphore_obtain(
+ tty->rawInBuf.Semaphore, tty->rawInBufSemaphoreOptions, timeout);
+ if (sc != RTEMS_SUCCESSFUL)
+ break;
+ } else {
break;
+ }
}
}
}
More information about the vc
mailing list