Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/common/lib/libc/arch/aarch64/string avoid reading from out o...
details: https://anonhg.NetBSD.org/src/rev/50aa79668a73
branches: trunk
changeset: 320458:50aa79668a73
user: ryo <ryo%NetBSD.org@localhost>
date: Mon Jul 09 06:07:06 2018 +0000
description:
avoid reading from out of range that may cause access fault.
diffstat:
common/lib/libc/arch/aarch64/string/memcmp.S | 14 ++++++++------
1 files changed, 8 insertions(+), 6 deletions(-)
diffs (42 lines):
diff -r 3c6321fa1aa1 -r 50aa79668a73 common/lib/libc/arch/aarch64/string/memcmp.S
--- a/common/lib/libc/arch/aarch64/string/memcmp.S Mon Jul 09 05:43:35 2018 +0000
+++ b/common/lib/libc/arch/aarch64/string/memcmp.S Mon Jul 09 06:07:06 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: memcmp.S,v 1.2 2018/02/04 21:52:16 skrll Exp $ */
+/* $NetBSD: memcmp.S,v 1.3 2018/07/09 06:07:06 ryo Exp $ */
/*-
* Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
#include <machine/asm.h>
-RCSID("$NetBSD: memcmp.S,v 1.2 2018/02/04 21:52:16 skrll Exp $")
+RCSID("$NetBSD: memcmp.S,v 1.3 2018/07/09 06:07:06 ryo Exp $")
ENTRY(memcmp)
mov x9, x0
@@ -55,17 +55,19 @@
sub x2, x2, #8 /* now subtract a dword */
sub x9, x9, x3 /* dword align src1 */
- sub x10, x10, x3 /* adjust src2 */
+ ldr x6, [x10], #8 /* load dword from src2 */
+ sub x10, x10, x3 /* src2 -= x3 */
lsl x3, x3, #3 /* convert bytes to bits */
ldr x4, [x9], #8 /* load dword from src1 */
- ldr x6, [x10], #8 /* load dword from src2 */
#ifdef __AARCH64EB__
lsl x4, x4, x3 /* discard leading bytes from data1 */
- lsl x6, x6, x3 /* discard leading bytes from data2 */
+ lsr x6, x6, x3 /* discard leading bytes from data2 */
+ lsl x6, x6, x3 /* get back bit position */
#else
lsr x4, x4, x3 /* discard leading bytes from data1 */
- lsr x6, x6, x3 /* discard leading bytes from data2 */
+ lsl x6, x6, x3 /* discard leading bytes from data2 */
+ lsr x6, x6, x3 /* get back bit position */
#endif
subs x0, x4, x6 /* compare data */
b.ne .Lmemcmp_last_compare /* difference. find it */
Home |
Main Index |
Thread Index |
Old Index