• Linus Torvalds's avatar
    tty: avoid using vfs_iocb_iter_write() for redirected console writes · a9cbbb80
    Linus Torvalds authored
    It turns out that the vfs_iocb_iter_{read,write}() functions are
    entirely broken, and don't actually use the passed-in file pointer for
    IO - only for the preparatory work (permission checking and for the
    write_iter function lookup).
    
    That worked fine for overlayfs, which always builds the new iocb with
    the same file pointer that it passes in, but in the general case it ends
    up doing nonsensical things (and could cause an iterator call that
    doesn't even match the passed-in file pointer).
    
    This subtly broke the tty conversion to write_iter in commit
    9bb48c82 ("tty: implement write_iter"), because the console
    redirection didn't actually end up redirecting anything, since the
    passed-in file pointer was basically ignored, and the actual write was
    done with the original non-redirected console tty after all.
    
    The main visible effect of this is that the console messages were no
    longer logged to /var/log/boot.log during graphical boot.
    
    Fix the issue by simply not using the vfs write "helper" function at
    all, and just redirecting the write entirely internally to the tty
    layer.  Do the target writability permission checks when actually
    registering the target tty with TIOCCONS instead of at write time.
    
    Fixes: 9bb48c82 ("tty: implement write_iter")
    Reported-and-tested-by: default avatarHans de Goede <hdegoede@redhat.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: stable@kernel.org
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    a9cbbb80
tty_io.c 85.5 KB