screen/screen-E3.patch
Vaclav Dolezal 1c81c3cfed New upstream release 4.7.0
- drop Patch6 (texinfo): it's no longer needed as contributor list
   uses @verbatim now
 - drop unused screen-altscreen.patch
 - added descriptions to patches

Resolves: #1757638
2019-10-03 14:56:52 +02:00

59 lines
1.5 KiB
Diff

Clear scrollback buffer when locking terminal
Linux kernel 3.0 adds a new command to clear the scrollback buffer in
the linux console. It's available in the ncurses terminfo entry as
extended capability E3. This is useful to prevent an attacker to read
content of a locked terminal via Shift-PgUp key.
diff --git a/display.c b/display.c
index a4d953a..9ce34dd 100644
--- a/display.c
+++ b/display.c
@@ -4079,4 +4079,10 @@ char **cmdv;
#endif /* BLANKER_PRG */
+void
+ClearScrollbackBuffer()
+{
+ if (D_CE3)
+ AddCStr(D_CE3);
+}
diff --git a/extern.h b/extern.h
index bb7d3fb..a2678e3 100644
--- a/extern.h
+++ b/extern.h
@@ -319,6 +319,7 @@ extern int color256to88 __P((int));
extern void ResetIdle __P((void));
extern void KillBlanker __P((void));
extern void DisplaySleep1000 __P((int, int));
+extern void ClearScrollbackBuffer __P((void));
/* resize.c */
extern int ChangeWindowSize __P((struct win *, int, int, int));
diff --git a/screen.c b/screen.c
index c50952b..2fee7fa 100644
--- a/screen.c
+++ b/screen.c
@@ -1950,6 +1950,7 @@ void Detach(int mode)
case D_LOCK:
ClearAll();
+ ClearScrollbackBuffer();
sign = SIG_LOCK;
/* tell attacher to lock terminal with a lockprg. */
break;
diff --git a/term.c b/term.c
index c92d85a..a6e9200 100644
--- a/term.c
+++ b/term.c
@@ -83,6 +83,7 @@ struct term term[T_N] =
{ "CD", T_STR },
{ "ce", T_STR },
{ "cb", T_STR },
+ { "E3", T_STR },
/* initialise */
{ "is", T_STR },