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 <stable@kernel.org> Signed-off-by: Yangxi Xiang <xyangxi5@gmail.com> Link: https://lore.kernel.org/r/20220628093322.5688-1-xyangxi5@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 4f532c1 commit 39cdb68

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

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)