Messages in this thread Patch in this message | | | From | Yangxi Xiang <> | Subject | [PATCH] vt: fix memory overlapping when deleting chars in the buffer | Date | Mon, 27 Jun 2022 18:29:40 +0800 |
| |
A memory overlapping copy occurs when deleting a long line. Fix it by using scr_memmovew.
Signed-off-by: Yangxi Xiang <xyangxi5@gmail.com> --- drivers/tty/vt/vt.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c index f8c87c4d7399..d87bff9d8ed5 100644 --- a/drivers/tty/vt/vt.c +++ b/drivers/tty/vt/vt.c @@ -853,9 +853,13 @@ static void insert_char(struct vc_data *vc, unsigned int nr) static void delete_char(struct vc_data *vc, unsigned int nr) { unsigned short *p = (unsigned short *) vc->vc_pos; + unsigned short cp = (vc->vc_cols - vc->state.x - nr) * 2; vc_uniscr_delete(vc, nr); - scr_memcpyw(p, p + nr, (vc->vc_cols - vc->state.x - nr) * 2); + if (cp > nr) + scr_memmovew(p, p + nr, cp); + else + scr_memcpyw(p, p + nr, cp); scr_memsetw(p + vc->vc_cols - vc->state.x - nr, vc->vc_video_erase_char, nr * 2); vc->vc_need_wrap = 0; -- 2.17.1
| |