tty: Clean console safely
authorPetr Písař <ppisar@redhat.com>
Fri, 15 Apr 2011 08:08:08 +0000 (10:08 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 19 Apr 2011 23:33:37 +0000 (16:33 -0700)
Traditional \E[2J sequence erases console display but scroll-back
buffer and underlying device (frame) buffer keep data that can be
accessed by scrolling console back.

This patch introduce new \E[J parameter 3 that allows to scramble
scroll-back buffer explicitly. Session locking programs (screen,
vlock) can use it to prevent attacker to browse locked console
history.

Signed-off-by: Petr Písař <ppisar@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/tty/vt/vt.c

index a48da20630607cf88d8f2bd8f780955a842fc771..b3915b7ad3e2facb654dbd50114623f01996f431 100644 (file)
@@ -1193,6 +1193,13 @@ static void csi_J(struct vc_data *vc, int vpar)
                                              vc->vc_x + 1);
                        }
                        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);
+                       set_origin(vc);
+                       if (CON_IS_VISIBLE(vc))
+                               update_screen(vc);
+                       /* fall through */
                case 2: /* erase whole display */
                        count = vc->vc_cols * vc->vc_rows;
                        start = (unsigned short *)vc->vc_origin;