• Peter Hurley's avatar
    serial: Fix locking for uart driver set_termios() method · 7c8ab967
    Peter Hurley authored
    The low-level uart driver may modify termios settings to override
    settings that are not compatible with the uart, such as CRTSCTS.
    Thus, callers of the low-level uart driver's set_termios() method must
    hold termios_rwsem write lock to prevent concurrent access to termios,
    in case such override occurs.
    
    The termios_rwsem lock requirement does not extend to console setup
    (ie., uart_set_options), as console setup cannot race with tty
    operations. Nor does this lock requirement extend to functions which
    cannot be concurrent with tty ioctls (ie., uart_port_startup() and
    uart_resume_port()).
    
    Further, always claim the port mutex to protect hardware
    re-reprogramming in the set_termios() uart driver method. Note this
    is unnecessary for console initialization in uart_set_options()
    which cannot be concurrent with other uart operations.
    Signed-off-by: default avatarPeter Hurley <peter@hurleysoftware.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    7c8ab967
serial_core.c 71.4 KB