diff options
author | Bryan Cantrill <bryan@joyent.com> | 2016-06-07 21:21:23 +0000 |
---|---|---|
committer | Robert Mustacchi <rm@joyent.com> | 2016-06-08 13:25:59 -0700 |
commit | 82d2d142300e27cbe46f9fd3731e9d280b2c66e8 (patch) | |
tree | 66d0292b6d2645f081ae04de6fa44a0f8994b5da /usr/src/uts/common/dtrace/dtrace.c | |
parent | f11ba53f80410731989b127bc0e36a178773e84a (diff) | |
download | illumos-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.c | 8 |
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; |