diff options
Diffstat (limited to 'drivers/char/vt_ioctl.c')
-rw-r--r-- | drivers/char/vt_ioctl.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/char/vt_ioctl.c b/drivers/char/vt_ioctl.c index 7a61a2a9aafe..f69a8258095c 100644 --- a/drivers/char/vt_ioctl.c +++ b/drivers/char/vt_ioctl.c | |||
@@ -847,14 +847,24 @@ int vt_ioctl(struct tty_struct *tty, struct file * file, | |||
847 | case VT_RESIZE: | 847 | case VT_RESIZE: |
848 | { | 848 | { |
849 | struct vt_sizes __user *vtsizes = up; | 849 | struct vt_sizes __user *vtsizes = up; |
850 | struct vc_data *vc; | ||
851 | |||
850 | ushort ll,cc; | 852 | ushort ll,cc; |
851 | if (!perm) | 853 | if (!perm) |
852 | return -EPERM; | 854 | return -EPERM; |
853 | if (get_user(ll, &vtsizes->v_rows) || | 855 | if (get_user(ll, &vtsizes->v_rows) || |
854 | get_user(cc, &vtsizes->v_cols)) | 856 | get_user(cc, &vtsizes->v_cols)) |
855 | return -EFAULT; | 857 | return -EFAULT; |
856 | for (i = 0; i < MAX_NR_CONSOLES; i++) | 858 | |
857 | vc_lock_resize(vc_cons[i].d, cc, ll); | 859 | for (i = 0; i < MAX_NR_CONSOLES; i++) { |
860 | vc = vc_cons[i].d; | ||
861 | |||
862 | if (vc) { | ||
863 | vc->vc_resize_user = 1; | ||
864 | vc_lock_resize(vc_cons[i].d, cc, ll); | ||
865 | } | ||
866 | } | ||
867 | |||
858 | return 0; | 868 | return 0; |
859 | } | 869 | } |
860 | 870 | ||
@@ -900,6 +910,7 @@ int vt_ioctl(struct tty_struct *tty, struct file * file, | |||
900 | vc_cons[i].d->vc_scan_lines = vlin; | 910 | vc_cons[i].d->vc_scan_lines = vlin; |
901 | if (clin) | 911 | if (clin) |
902 | vc_cons[i].d->vc_font.height = clin; | 912 | vc_cons[i].d->vc_font.height = clin; |
913 | vc_cons[i].d->vc_resize_user = 1; | ||
903 | vc_resize(vc_cons[i].d, cc, ll); | 914 | vc_resize(vc_cons[i].d, cc, ll); |
904 | release_console_sem(); | 915 | release_console_sem(); |
905 | } | 916 | } |