forked from Minki/linux
vt_ioctl: fix GIO_UNIMAP regression
In commit5ba1278787
, we shuffled with the check of 'perm'. But my brain somehow inverted the condition in 'do_unimap_ioctl' (I thought it is ||, not &&), so GIO_UNIMAP stopped working completely. Move the 'perm' checks back to do_unimap_ioctl and do them right again. In fact, this reverts this part of code to the pre-5ba127878722 state. Except 'perm' is now a bool. Fixes:5ba1278787
("vt_ioctl: move perm checks level up") Cc: stable@vger.kernel.org Reported-by: Fabian Vogt <fvogt@suse.com> Signed-off-by: Jiri Slaby <jslaby@suse.cz> Link: https://lore.kernel.org/r/20201026055419.30518-1-jslaby@suse.cz Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
82e61c3909
commit
d546547903
@ -549,7 +549,7 @@ static int vt_io_fontreset(struct console_font_op *op)
|
||||
}
|
||||
|
||||
static inline int do_unimap_ioctl(int cmd, struct unimapdesc __user *user_ud,
|
||||
struct vc_data *vc)
|
||||
bool perm, struct vc_data *vc)
|
||||
{
|
||||
struct unimapdesc tmp;
|
||||
|
||||
@ -557,9 +557,11 @@ static inline int do_unimap_ioctl(int cmd, struct unimapdesc __user *user_ud,
|
||||
return -EFAULT;
|
||||
switch (cmd) {
|
||||
case PIO_UNIMAP:
|
||||
if (!perm)
|
||||
return -EPERM;
|
||||
return con_set_unimap(vc, tmp.entry_ct, tmp.entries);
|
||||
case GIO_UNIMAP:
|
||||
if (fg_console != vc->vc_num)
|
||||
if (!perm && fg_console != vc->vc_num)
|
||||
return -EPERM;
|
||||
return con_get_unimap(vc, tmp.entry_ct, &(user_ud->entry_ct),
|
||||
tmp.entries);
|
||||
@ -639,10 +641,7 @@ static int vt_io_ioctl(struct vc_data *vc, unsigned int cmd, void __user *up,
|
||||
|
||||
case PIO_UNIMAP:
|
||||
case GIO_UNIMAP:
|
||||
if (!perm)
|
||||
return -EPERM;
|
||||
|
||||
return do_unimap_ioctl(cmd, up, vc);
|
||||
return do_unimap_ioctl(cmd, up, perm, vc);
|
||||
|
||||
default:
|
||||
return -ENOIOCTLCMD;
|
||||
|
Loading…
Reference in New Issue
Block a user