summaryrefslogtreecommitdiff
path: root/sys/arch/amd64
diff options
context:
space:
mode:
authormartin <martin@NetBSD.org>2019-11-21 14:02:33 +0000
committermartin <martin@NetBSD.org>2019-11-21 14:02:33 +0000
commit1a80529a9f44208ec58371bc66f77b196d520ecf (patch)
tree182b0ced501919438b756304e90ae5cf5346d7e1 /sys/arch/amd64
parent88e5d683aeea9277909f8ab7fb224f9f3750501b (diff)
Pull up following revision(s) (requested by rin in ticket #460):
sys/arch/amd64/amd64/netbsd32_machdep.c: revision 1.130 Fix netbsd32_process_write_dbregs() for amd64: - Zero-clear regs64 so that random values are not written into the preserved registers. - Cast 32-bit registers (int) to u_int, in order to avoid undesired sign extension when filled into 64-bit registers (long). XXX pullup to netbsd-9
Diffstat (limited to 'sys/arch/amd64')
-rw-r--r--sys/arch/amd64/amd64/netbsd32_machdep.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/sys/arch/amd64/amd64/netbsd32_machdep.c b/sys/arch/amd64/amd64/netbsd32_machdep.c
index 60fd7082219..44a8f9c4930 100644
--- a/sys/arch/amd64/amd64/netbsd32_machdep.c
+++ b/sys/arch/amd64/amd64/netbsd32_machdep.c
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_machdep.c,v 1.125 2019/07/20 18:25:11 christos Exp $ */
+/* $NetBSD: netbsd32_machdep.c,v 1.125.2.1 2019/11/21 14:02:33 martin Exp $ */
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.125 2019/07/20 18:25:11 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.125.2.1 2019/11/21 14:02:33 martin Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -489,13 +489,15 @@ netbsd32_process_write_dbregs(struct lwp *l, const struct dbreg32 *regs,
return EINVAL;
}
- regs64.dr[0] = regs->dr[0];
- regs64.dr[1] = regs->dr[1];
- regs64.dr[2] = regs->dr[2];
- regs64.dr[3] = regs->dr[3];
+ memset(&regs64, 0, sizeof(regs64));
- regs64.dr[6] = regs->dr[6];
- regs64.dr[7] = regs->dr[7];
+ regs64.dr[0] = (u_int)regs->dr[0];
+ regs64.dr[1] = (u_int)regs->dr[1];
+ regs64.dr[2] = (u_int)regs->dr[2];
+ regs64.dr[3] = (u_int)regs->dr[3];
+
+ regs64.dr[6] = (u_int)regs->dr[6];
+ regs64.dr[7] = (u_int)regs->dr[7];
x86_dbregs_write(l, &regs64);
return 0;