mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 15:47:36 +00:00
vt_kdsetmode: extend console locking
As per the long-suffering comment. Reported-by: Minh Yuan <yuanmingbuaa@gmail.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Jiri Slaby <jirislaby@kernel.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
3a2b2eb556
commit
2287a51ba8
1 changed files with 6 additions and 4 deletions
|
@ -246,6 +246,8 @@ int vt_waitactive(int n)
|
||||||
*
|
*
|
||||||
* XXX It should at least call into the driver, fbdev's definitely need to
|
* XXX It should at least call into the driver, fbdev's definitely need to
|
||||||
* restore their engine state. --BenH
|
* restore their engine state. --BenH
|
||||||
|
*
|
||||||
|
* Called with the console lock held.
|
||||||
*/
|
*/
|
||||||
static int vt_kdsetmode(struct vc_data *vc, unsigned long mode)
|
static int vt_kdsetmode(struct vc_data *vc, unsigned long mode)
|
||||||
{
|
{
|
||||||
|
@ -262,7 +264,6 @@ static int vt_kdsetmode(struct vc_data *vc, unsigned long mode)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: this needs the console lock extending */
|
|
||||||
if (vc->vc_mode == mode)
|
if (vc->vc_mode == mode)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -271,12 +272,10 @@ static int vt_kdsetmode(struct vc_data *vc, unsigned long mode)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* explicitly blank/unblank the screen if switching modes */
|
/* explicitly blank/unblank the screen if switching modes */
|
||||||
console_lock();
|
|
||||||
if (mode == KD_TEXT)
|
if (mode == KD_TEXT)
|
||||||
do_unblank_screen(1);
|
do_unblank_screen(1);
|
||||||
else
|
else
|
||||||
do_blank_screen(1);
|
do_blank_screen(1);
|
||||||
console_unlock();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -378,7 +377,10 @@ static int vt_k_ioctl(struct tty_struct *tty, unsigned int cmd,
|
||||||
if (!perm)
|
if (!perm)
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
|
||||||
return vt_kdsetmode(vc, arg);
|
console_lock();
|
||||||
|
ret = vt_kdsetmode(vc, arg);
|
||||||
|
console_unlock();
|
||||||
|
return ret;
|
||||||
|
|
||||||
case KDGETMODE:
|
case KDGETMODE:
|
||||||
return put_user(vc->vc_mode, (int __user *)arg);
|
return put_user(vc->vc_mode, (int __user *)arg);
|
||||||
|
|
Loading…
Reference in a new issue