summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/dtrace/dtrace.c
diff options
context:
space:
mode:
authorBryan Cantrill <bryan@joyent.com>2016-06-07 21:21:23 +0000
committerRobert Mustacchi <rm@joyent.com>2016-06-08 13:25:59 -0700
commit82d2d142300e27cbe46f9fd3731e9d280b2c66e8 (patch)
tree66d0292b6d2645f081ae04de6fa44a0f8994b5da /usr/src/uts/common/dtrace/dtrace.c
parentf11ba53f80410731989b127bc0e36a178773e84a (diff)
downloadillumos-joyent-82d2d142300e27cbe46f9fd3731e9d280b2c66e8.tar.gz
7084 DTrace divide overflow can induce panic
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com> Approved by: Dan McDonald <danmcd@omniti.com>
Diffstat (limited to 'usr/src/uts/common/dtrace/dtrace.c')
-rw-r--r--usr/src/uts/common/dtrace/dtrace.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/usr/src/uts/common/dtrace/dtrace.c b/usr/src/uts/common/dtrace/dtrace.c
index c775224d86..3aeeef27f7 100644
--- a/usr/src/uts/common/dtrace/dtrace.c
+++ b/usr/src/uts/common/dtrace/dtrace.c
@@ -5759,8 +5759,10 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
regs[rd] = 0;
*flags |= CPU_DTRACE_DIVZERO;
} else {
+ DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
regs[rd] = (int64_t)regs[r1] /
(int64_t)regs[r2];
+ DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
}
break;
@@ -5769,7 +5771,9 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
regs[rd] = 0;
*flags |= CPU_DTRACE_DIVZERO;
} else {
+ DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
regs[rd] = regs[r1] / regs[r2];
+ DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
}
break;
@@ -5778,8 +5782,10 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
regs[rd] = 0;
*flags |= CPU_DTRACE_DIVZERO;
} else {
+ DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
regs[rd] = (int64_t)regs[r1] %
(int64_t)regs[r2];
+ DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
}
break;
@@ -5788,7 +5794,9 @@ dtrace_dif_emulate(dtrace_difo_t *difo, dtrace_mstate_t *mstate,
regs[rd] = 0;
*flags |= CPU_DTRACE_DIVZERO;
} else {
+ DTRACE_CPUFLAG_SET(CPU_DTRACE_NOFAULT);
regs[rd] = regs[r1] % regs[r2];
+ DTRACE_CPUFLAG_CLEAR(CPU_DTRACE_NOFAULT);
}
break;