Index: uspace/lib/c/generic/io/chargrid.c
===================================================================
--- uspace/lib/c/generic/io/chargrid.c	(revision 59cce2229acdeaeeefbb99985a65996c7cd9d9c7)
+++ uspace/lib/c/generic/io/chargrid.c	(revision ca645a25041e245f85f0c75c5695e8546fb409f1)
@@ -263,4 +263,7 @@
 void chargrid_set_cursor(chargrid_t *scrbuf, sysarg_t col, sysarg_t row)
 {
+	if (col >= scrbuf->cols || row >= scrbuf->rows)
+		return;
+
 	scrbuf->col = col;
 	scrbuf->row = row;
Index: uspace/lib/clui/tinput.c
===================================================================
--- uspace/lib/clui/tinput.c	(revision 59cce2229acdeaeeefbb99985a65996c7cd9d9c7)
+++ uspace/lib/clui/tinput.c	(revision ca645a25041e245f85f0c75c5695e8546fb409f1)
@@ -56,4 +56,5 @@
 } seek_dir_t;
 
+static void tinput_update_origin(tinput_t *);
 static void tinput_init(tinput_t *);
 static void tinput_insert_string(tinput_t *, const char *);
@@ -71,6 +72,10 @@
 static void tinput_console_set_lpos(tinput_t *ti, unsigned lpos)
 {
-	console_set_pos(ti->console, LIN_TO_COL(ti, lpos),
-	    LIN_TO_ROW(ti, lpos));
+	unsigned col = LIN_TO_COL(ti, lpos);
+	unsigned row = LIN_TO_ROW(ti, lpos);
+
+	assert(col < ti->con_cols);
+	assert(row < ti->con_rows);
+	console_set_pos(ti->console, col, row);
 }
 
@@ -163,4 +168,5 @@
 static void tinput_position_caret(tinput_t *ti)
 {
+	tinput_update_origin(ti);
 	tinput_console_set_lpos(ti, ti->text_coord + ti->pos);
 }
@@ -232,5 +238,4 @@
 
 	tinput_display_tail(ti, ti->pos - 1, 0);
-	tinput_update_origin(ti);
 	tinput_position_caret(ti);
 }
@@ -276,5 +281,4 @@
 
 	tinput_display_tail(ti, ti->pos - ilen, 0);
-	tinput_update_origin(ti);
 	tinput_position_caret(ti);
 }
