From 458d22f30259508abcc97d1331ad091d5e70c523 Mon Sep 17 00:00:00 2001 From: Peter Wemm Date: Tue, 27 Sep 2005 18:10:26 +0000 Subject: Don't let the upper bits of %dr6/%dr7 get set. Submitted by: Nate Eldredge --- sys/amd64/amd64/machdep.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'sys') diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 3e0795269c42..5345dc1318e9 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -1726,11 +1726,15 @@ set_dbregs(struct thread *td, struct dbreg *dbregs) * check for undefined settings. Setting these bit patterns * result in undefined behaviour and can lead to an unexpected * TRCTRAP or a general protection fault right here. + * Upper bits of dr6 and dr7 must not be set */ for (i = 0, mask1 = 0x3<<16, mask2 = 0x2<<16; i < 8; i++, mask1 <<= 2, mask2 <<= 2) if ((dbregs->dr[7] & mask1) == mask2) return (EINVAL); + if ((dbregs->dr[6] & 0xffffffff00000000ul) != 0 || + (dbregs->dr[7] & 0xffffffff00000000ul) != 0) + return (EINVAL); pcb = td->td_pcb; -- cgit v1.3