aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/char/vt.c8
-rw-r--r--include/linux/notifier.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/drivers/char/vt.c b/drivers/char/vt.c
index 9b58b894f823..df4c3ead9e2b 100644
--- a/drivers/char/vt.c
+++ b/drivers/char/vt.c
@@ -2054,6 +2054,7 @@ static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int co
2054 unsigned long draw_from = 0, draw_to = 0; 2054 unsigned long draw_from = 0, draw_to = 0;
2055 struct vc_data *vc; 2055 struct vc_data *vc;
2056 unsigned char vc_attr; 2056 unsigned char vc_attr;
2057 struct vt_notifier_param param;
2057 uint8_t rescan; 2058 uint8_t rescan;
2058 uint8_t inverse; 2059 uint8_t inverse;
2059 uint8_t width; 2060 uint8_t width;
@@ -2113,6 +2114,8 @@ static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int co
2113 if (IS_FG(vc)) 2114 if (IS_FG(vc))
2114 hide_cursor(vc); 2115 hide_cursor(vc);
2115 2116
2117 param.vc = vc;
2118
2116 while (!tty->stopped && count) { 2119 while (!tty->stopped && count) {
2117 int orig = *buf; 2120 int orig = *buf;
2118 c = orig; 2121 c = orig;
@@ -2201,6 +2204,11 @@ rescan_last_byte:
2201 tc = vc->vc_translate[vc->vc_toggle_meta ? (c | 0x80) : c]; 2204 tc = vc->vc_translate[vc->vc_toggle_meta ? (c | 0x80) : c];
2202 } 2205 }
2203 2206
2207 param.c = tc;
2208 if (atomic_notifier_call_chain(&vt_notifier_list, VT_PREWRITE,
2209 &param) == NOTIFY_STOP)
2210 continue;
2211
2204 /* If the original code was a control character we 2212 /* If the original code was a control character we
2205 * only allow a glyph to be displayed if the code is 2213 * only allow a glyph to be displayed if the code is
2206 * not normally used (such as for cursor movement) or 2214 * not normally used (such as for cursor movement) or
diff --git a/include/linux/notifier.h b/include/linux/notifier.h
index f4df40038f0c..20dfed590183 100644
--- a/include/linux/notifier.h
+++ b/include/linux/notifier.h
@@ -247,6 +247,7 @@ extern struct blocking_notifier_head reboot_notifier_list;
247#define VT_DEALLOCATE 0x0002 /* Console will be deallocated */ 247#define VT_DEALLOCATE 0x0002 /* Console will be deallocated */
248#define VT_WRITE 0x0003 /* A char got output */ 248#define VT_WRITE 0x0003 /* A char got output */
249#define VT_UPDATE 0x0004 /* A bigger update occurred */ 249#define VT_UPDATE 0x0004 /* A bigger update occurred */
250#define VT_PREWRITE 0x0005 /* A char is about to be written to the console */
250 251
251#endif /* __KERNEL__ */ 252#endif /* __KERNEL__ */
252#endif /* _LINUX_NOTIFIER_H */ 253#endif /* _LINUX_NOTIFIER_H */