git: 8647fe60b8c3 - stable/13 - tty: properly check character position when handling IUTF8 backspaces
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 20 Nov 2023 16:58:10 UTC
The branch stable/13 has been updated by christos:
URL: https://cgit.FreeBSD.org/src/commit/?id=8647fe60b8c3cc03cf1d53d281f9306b7043543b
commit 8647fe60b8c3cc03cf1d53d281f9306b7043543b
Author: Bojan Novković <bojan.novkovic@fer.hr>
AuthorDate: 2023-11-13 18:02:30 +0000
Commit: Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2023-11-20 16:57:49 +0000
tty: properly check character position when handling IUTF8 backspaces
The tty_rubchar() code handling backspaces for UTF-8 characters didn't
properly check whether the beginning of the current line was reached.
This resulted in a kernel panic in ttyinq_unputchar() when prodded with
certain malformed UTF-8 sequences.
PR: 275009
Reviewed by: christos
Differential Revision: https://reviews.freebsd.org/D42564
(cherry picked from commit c6d7be214811c315d234d64c6cbaa92d4f55d2c1)
---
sys/kern/tty_ttydisc.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/sys/kern/tty_ttydisc.c b/sys/kern/tty_ttydisc.c
index c46579cefbb1..cb5bf672d040 100644
--- a/sys/kern/tty_ttydisc.c
+++ b/sys/kern/tty_ttydisc.c
@@ -822,7 +822,13 @@ ttydisc_rubchar(struct tty *tp)
/* Loop back through inq until we hit the
* leading byte. */
while (CTL_UTF8_CONT(c) && nb < UTF8_STACKBUF) {
- ttyinq_peekchar(&tp->t_inq, &c, "e);
+ /*
+ * Check if we've reached the beginning
+ * of the line.
+ */
+ if (ttyinq_peekchar(&tp->t_inq, &c,
+ "e) != 0)
+ break;
ttyinq_unputchar(&tp->t_inq);
bytes[curidx] = c;
curidx--;