791日
・linux 4.4.31
linux 4.4.31リリースいただいたので早速
vd_unicon-kernel-20160116-4.4.patch
# cat drivers/tty/vt/vt.c.rej
--- drivers/tty/vt/vt.c 2016-01-11 08:01:32.000000000 +0900
+++ drivers/tty/vt/vt.c 2016-01-16 14:22:52.000000000 +0900
@@ -957,12 +1043,19 @@ static int vc_do_resize(struct tty_struc
if (new_cols == vc->vc_cols && new_rows == vc->vc_rows)
return 0;
+#ifdef CONFIG_UNICON
+ newscreen = kmalloc(new_screen_size*2, GFP_USER);
+#else
newscreen = kmalloc(new_screen_size, GFP_USER);
+#endif
if (!newscreen)
return -ENOMEM;
old_rows = vc->vc_rows;
old_row_size = vc->vc_size_row;
+#ifdef CONFIG_UNICON
+ old_screen_size = vc->vc_screenbuf_size;
+#endif
err = resize_screen(vc, new_cols, new_rows, user);
if (err) {
http://lkml.iu.edu/hypermail/linux/kernel/1611.1/02476.html
をもそもそもそ
ここのようだ?
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 136ebaaa9cc0..5ab54ef4f304 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -872,10 +872,15 @@ static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc,
if (new_cols == vc->vc_cols && new_rows == vc->vc_rows)
return 0;
+ if (new_screen_size > (4 << 20))
+ return -EINVAL;
newscreen = kmalloc(new_screen_size, GFP_USER);
if (!newscreen)
return -ENOMEM;
+ if (vc == sel_cons)
+ clear_selection();
+
old_rows = vc->vc_rows;
old_row_size = vc->vc_size_row;
@@ -1173,7 +1178,7 @@ static void csi_J(struct vc_data *vc, int vpar)
break;
case 3: /* erase scroll-back buffer (and whole display) */
scr_memsetw(vc->vc_screenbuf, vc->vc_video_erase_char,
- vc->vc_screenbuf_size >> 1);
+ vc->vc_screenbuf_size);
set_origin(vc);
if (CON_IS_VISIBLE(vc))
update_screen(vc);
vt.cに手をいれていただいたようだ
ひさしぶりにパッチをやってみなけりゃ。