Module Name: src
Committed By: rin
Date: Wed Nov 20 10:57:08 UTC 2019
Modified Files:
src/sys/arch/amd64/amd64: netbsd32_machdep.c
Log Message:
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
To generate a diff of this commit:
cvs rdiff -u -r1.129 -r1.130 src/sys/arch/amd64/amd64/netbsd32_machdep.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/amd64/amd64/netbsd32_machdep.c
diff -u src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.129 src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.130
--- src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.129 Sun Nov 10 21:16:22 2019
+++ src/sys/arch/amd64/amd64/netbsd32_machdep.c Wed Nov 20 10:57:08 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32_machdep.c,v 1.129 2019/11/10 21:16:22 chs Exp $ */
+/* $NetBSD: netbsd32_machdep.c,v 1.130 2019/11/20 10:57:08 rin Exp $ */
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.129 2019/11/10 21:16:22 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.130 2019/11/20 10:57:08 rin Exp $");
#ifdef _KERNEL_OPT
#include "opt_compat_netbsd.h"
@@ -487,13 +487,15 @@ netbsd32_process_write_dbregs(struct lwp
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(®s64, 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, ®s64);
return 0;