summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorYangxi Xiang <xyangxi5@gmail.com>2022-06-28 17:33:22 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-06-30 17:17:40 +0200
commit39cdb68c64d84e71a4a717000b6e5de208ee60cc (patch)
tree87de06e2248e3be3b78105091cd9fd760199e36e /drivers
parent4f532c1e25319e42996ec18a1f473fd50c8e575d (diff)
downloadlinux-stable-39cdb68c64d84e71a4a717000b6e5de208ee60cc.tar.gz
linux-stable-39cdb68c64d84e71a4a717000b6e5de208ee60cc.tar.bz2
linux-stable-39cdb68c64d84e71a4a717000b6e5de208ee60cc.zip
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: 81732c3b2fed ("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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/tty/vt/vt.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index f8c87c4d7399..dfc1f4b445f3 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -855,7 +855,7 @@ static void delete_char(struct vc_data *vc, unsigned int nr)
unsigned short *p = (unsigned short *) vc->vc_pos;
vc_uniscr_delete(vc, nr);
- scr_memcpyw(p, p + nr, (vc->vc_cols - vc->state.x - nr) * 2);
+ scr_memmovew(p, p + nr, (vc->vc_cols - vc->state.x - nr) * 2);
scr_memsetw(p + vc->vc_cols - vc->state.x - nr, vc->vc_video_erase_char,
nr * 2);
vc->vc_need_wrap = 0;