• Yifeng Li's avatar
    tty: vt.c: Fix TIOCL_BLANKSCREEN console blanking if blankinterval == 0 · f5eaf86b
    Yifeng Li authored
    commit 75ddbc1f upstream.
    
    Previously, in the userspace, it was possible to use the "setterm" command
    from util-linux to blank the VT console by default, using the following
    command.
    
    According to the man page,
    
    > The force option keeps the screen blank even if a key is pressed.
    
    It was implemented by calling TIOCL_BLANKSCREEN.
    
    	case BLANKSCREEN:
    		ioctlarg = TIOCL_BLANKSCREEN;
    		if (ioctl(STDIN_FILENO, TIOCLINUX, &ioctlarg))
    			warn(_("cannot force blank"));
    		break;
    
    However, after Linux 4.12, this command ceased to work anymore, which is
    unexpected. By inspecting the kernel source, it shows that the issue was
    triggered by the side-effect from commit a4199f5e ("tty: Disable
    default console blanking interval").
    
    The console blanking is implemented by function do_blank_screen() in vt.c:
    "blank_state" will be initialized to "blank_normal_wait" in con_init() if
    AND ONLY IF ("blankinterval" > 0). If "blankinterval" is 0, "blank_state"
    will be "blank_off" (== 0), and a call to do_blank_screen() will always
    abort, even if a forced blanking is required from the user by calling
    TIOCL_BLANKSCREEN, the console won't be blanked.
    
    This behavior is unexpected from a user's point-of-view, since it's not
    mentioned in any documentation. The setterm man page suggests it will
    always work, and the kernel comments in uapi/linux/tiocl.h says
    
    > /* keep screen blank even if a key is pressed */
    > #define TIOCL_BLANKSCREEN 14
    
    To fix it, we simply remove the "blank_state != blank_off" check, as
    pointed out by Nicolas Pitre, this check doesn't logically make sense
    and it's safe to remove.
    Suggested-by: default avatarNicolas Pitre <nicolas.pitre@linaro.org>
    Fixes: a4199f5e ("tty: Disable default console blanking interval")
    Signed-off-by: default avatarYifeng Li <tomli@tomli.me>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    f5eaf86b
vt.c 112 KB