lkml.org 
[lkml]   [2020]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 135/148] vt: vt_ioctl: remove unnecessary console allocation checks
    Date
    From: Eric Biggers <ebiggers@google.com>

    commit 1aa6e058dd6cd04471b1f21298270014daf48ac9 upstream.

    The vc_cons_allocated() checks in vt_ioctl() and vt_compat_ioctl() are
    unnecessary because they can only be reached by calling ioctl() on an
    open tty, which implies the corresponding virtual console is allocated.

    And even if the virtual console *could* be freed concurrently, then
    these checks would be broken since they aren't done under console_lock,
    and the vc_data is dereferenced before them anyway.

    So, remove these unneeded checks to avoid confusion.

    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Link: https://lore.kernel.org/r/20200224080326.295046-1-ebiggers@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/tty/vt/vt_ioctl.c | 21 ++-------------------
    1 file changed, 2 insertions(+), 19 deletions(-)

    --- a/drivers/tty/vt/vt_ioctl.c
    +++ b/drivers/tty/vt/vt_ioctl.c
    @@ -350,22 +350,13 @@ int vt_ioctl(struct tty_struct *tty,
    {
    struct vc_data *vc = tty->driver_data;
    struct console_font_op op; /* used in multiple places here */
    - unsigned int console;
    + unsigned int console = vc->vc_num;
    unsigned char ucval;
    unsigned int uival;
    void __user *up = (void __user *)arg;
    int i, perm;
    int ret = 0;

    - console = vc->vc_num;
    -
    -
    - if (!vc_cons_allocated(console)) { /* impossible? */
    - ret = -ENOIOCTLCMD;
    - goto out;
    - }
    -
    -
    /*
    * To have permissions to do most of the vt ioctls, we either have
    * to be the owner of the tty, or have CAP_SYS_TTY_CONFIG.
    @@ -1195,18 +1186,10 @@ long vt_compat_ioctl(struct tty_struct *
    {
    struct vc_data *vc = tty->driver_data;
    struct console_font_op op; /* used in multiple places here */
    - unsigned int console;
    void __user *up = (void __user *)arg;
    int perm;
    int ret = 0;

    - console = vc->vc_num;
    -
    - if (!vc_cons_allocated(console)) { /* impossible? */
    - ret = -ENOIOCTLCMD;
    - goto out;
    - }
    -
    /*
    * To have permissions to do most of the vt ioctls, we either have
    * to be the owner of the tty, or have CAP_SYS_TTY_CONFIG.
    @@ -1266,7 +1249,7 @@ long vt_compat_ioctl(struct tty_struct *
    arg = (unsigned long)compat_ptr(arg);
    goto fallback;
    }
    -out:
    +
    return ret;

    fallback:

    \
     
     \ /
      Last update: 2022-09-17 16:07    [W:4.058 / U:0.228 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site