diff options
author | Petr Písař <ppisar@redhat.com> | 2011-04-15 04:08:08 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-04-19 19:33:37 -0400 |
commit | f8df13e0a901fe55631fed66562369b4dba40f8b (patch) | |
tree | 105031898b999a9da275a7aa32b5d67733d5b849 | |
parent | d94206028854ba4c891004cecdbb2e220bf277bb (diff) |
tty: Clean console safely
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>
-rw-r--r-- | drivers/tty/vt/vt.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c index a48da2063060..b3915b7ad3e2 100644 --- a/drivers/tty/vt/vt.c +++ b/drivers/tty/vt/vt.c | |||
@@ -1193,6 +1193,13 @@ static void csi_J(struct vc_data *vc, int vpar) | |||
1193 | vc->vc_x + 1); | 1193 | vc->vc_x + 1); |
1194 | } | 1194 | } |
1195 | break; | 1195 | break; |
1196 | case 3: /* erase scroll-back buffer (and whole display) */ | ||
1197 | scr_memsetw(vc->vc_screenbuf, vc->vc_video_erase_char, | ||
1198 | vc->vc_screenbuf_size >> 1); | ||
1199 | set_origin(vc); | ||
1200 | if (CON_IS_VISIBLE(vc)) | ||
1201 | update_screen(vc); | ||
1202 | /* fall through */ | ||
1196 | case 2: /* erase whole display */ | 1203 | case 2: /* erase whole display */ |
1197 | count = vc->vc_cols * vc->vc_rows; | 1204 | count = vc->vc_cols * vc->vc_rows; |
1198 | start = (unsigned short *)vc->vc_origin; | 1205 | start = (unsigned short *)vc->vc_origin; |