Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f24fa908 authored by George Kennedy's avatar George Kennedy Committed by Greg Kroah-Hartman
Browse files

vt_ioctl: change VT_RESIZEX ioctl to check for error return from vc_resize()



commit bc5269ca765057a1b762e79a1cfd267cd7bf1c46 upstream.

vc_resize() can return with an error after failure. Change VT_RESIZEX ioctl
to save struct vc_data values that are modified and restore the original
values in case of error.

Signed-off-by: default avatarGeorge Kennedy <george.kennedy@oracle.com>
Cc: stable <stable@vger.kernel.org>
Reported-by: default avatar <syzbot+38a3699c7eaf165b97a6@syzkaller.appspotmail.com>
Link: https://lore.kernel.org/r/1596213192-6635-2-git-send-email-george.kennedy@oracle.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 130c03c8
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -896,12 +896,22 @@ int vt_ioctl(struct tty_struct *tty,
			console_lock();
			vcp = vc_cons[i].d;
			if (vcp) {
				int ret;
				int save_scan_lines = vcp->vc_scan_lines;
				int save_font_height = vcp->vc_font.height;

				if (v.v_vlin)
					vcp->vc_scan_lines = v.v_vlin;
				if (v.v_clin)
					vcp->vc_font.height = v.v_clin;
				vcp->vc_resize_user = 1;
				vc_resize(vcp, v.v_cols, v.v_rows);
				ret = vc_resize(vcp, v.v_cols, v.v_rows);
				if (ret) {
					vcp->vc_scan_lines = save_scan_lines;
					vcp->vc_font.height = save_font_height;
					console_unlock();
					return ret;
				}
			}
			console_unlock();
		}