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,
|
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;
|
struct unimapdesc tmp;
|
||||||
|
|
||||||
|
@ -557,9 +557,11 @@ static inline int do_unimap_ioctl(int cmd, struct unimapdesc __user *user_ud,
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case PIO_UNIMAP:
|
case PIO_UNIMAP:
|
||||||
|
if (!perm)
|
||||||
|
return -EPERM;
|
||||||
return con_set_unimap(vc, tmp.entry_ct, tmp.entries);
|
return con_set_unimap(vc, tmp.entry_ct, tmp.entries);
|
||||||
case GIO_UNIMAP:
|
case GIO_UNIMAP:
|
||||||
if (fg_console != vc->vc_num)
|
if (!perm && fg_console != vc->vc_num)
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
return con_get_unimap(vc, tmp.entry_ct, &(user_ud->entry_ct),
|
return con_get_unimap(vc, tmp.entry_ct, &(user_ud->entry_ct),
|
||||||
tmp.entries);
|
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 PIO_UNIMAP:
|
||||||
case GIO_UNIMAP:
|
case GIO_UNIMAP:
|
||||||
if (!perm)
|
return do_unimap_ioctl(cmd, up, perm, vc);
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
return do_unimap_ioctl(cmd, up, vc);
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -ENOIOCTLCMD;
|
return -ENOIOCTLCMD;
|
||||||
|
|
Loading…
Reference in New Issue