• Peter Hurley's avatar
    n_tty: Fix EOF push handling · 40d5e090
    Peter Hurley authored
    In canonical mode, an EOF which is not the first character of the line
    causes read() to complete and return the number of characters read so
    far (commonly referred to as EOF push). However, if the previous read()
    returned because the user buffer was full _and_ the next character
    is an EOF not at the beginning of the line, read() must not return 0,
    thus mistakenly indicating the end-of-file condition.
    
    The TTY_PUSH flag is used to indicate an EOF was received which is not
    at the beginning of the line. Because the EOF push condition is
    evaluated by a thread other than the read(), multiple EOF pushes can
    cause a premature end-of-file to be indicated.
    
    Instead, discover the 'EOF push as first read character' condition
    from the read() thread itself, and restart the i/o loop if detected.
    Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    40d5e090
n_tty.c 57.8 KB