Skip to content

Commit 39cdb68

Browse files
Myriad-Dreaminggregkh
authored andcommitted
vt: fix memory overlapping when deleting chars in the buffer
A memory overlapping copy occurs when deleting a long line. This memory overlapping copy can cause data corruption when scr_memcpyw is optimized to memcpy because memcpy does not ensure its behavior if the destination buffer overlaps with the source buffer. The line buffer is not always broken, because the memcpy utilizes the hardware acceleration, whose result is not deterministic. Fix this problem by using replacing the scr_memcpyw with scr_memmovew. Fixes: 81732c3 ("tty vt: Fix line garbage in virtual console on command line edition") Cc: stable <[email protected]> Signed-off-by: Yangxi Xiang <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 4f532c1 commit 39cdb68

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

drivers/tty/vt/vt.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -855,7 +855,7 @@ static void delete_char(struct vc_data *vc, unsigned int nr)
855855
unsigned short *p = (unsigned short *) vc->vc_pos;
856856

857857
vc_uniscr_delete(vc, nr);
858-
scr_memcpyw(p, p + nr, (vc->vc_cols - vc->state.x - nr) * 2);
858+
scr_memmovew(p, p + nr, (vc->vc_cols - vc->state.x - nr) * 2);
859859
scr_memsetw(p + vc->vc_cols - vc->state.x - nr, vc->vc_video_erase_char,
860860
nr * 2);
861861
vc->vc_need_wrap = 0;

0 commit comments

Comments
 (0)