[DTrace-devel] [PATCH 05/14] alloca: new faults
Nick Alcock
nick.alcock at oracle.com
Wed Mar 2 13:44:58 UTC 2022
We'll use DTRACEFLT_BADSIZE to distinguish in error messages between
out-of-bounds errors in bcopy and the like, and size-too-large errors.
(Without this, it's hard to tell if a, say, 0x12 in the fault value
is a nearly-NULL pointer or a wrong size.)
We'll use DTRACEFLT_INTERR to indicate can-never-happen errors where we
have tested the actual condition already (and emitted a proper error)
followed by a check to placate the verifier (which will always succeed
if the actual condition check failed). The latter failure happening at
runtime always indicates a bug in DTrace, not in the user's code, so
indicate as much.
Signed-off-by: Nick Alcock <nick.alcock at oracle.com>
---
include/dtrace/faults_defines.h | 2 ++
libdtrace/dt_error.c | 2 ++
libdtrace/dt_handle.c | 1 +
3 files changed, 5 insertions(+)
diff --git a/include/dtrace/faults_defines.h b/include/dtrace/faults_defines.h
index 20c57ad77499..977db5e57817 100644
--- a/include/dtrace/faults_defines.h
+++ b/include/dtrace/faults_defines.h
@@ -32,6 +32,8 @@
#define DTRACEFLT_UPRIV 7 /* Illegal user access */
#define DTRACEFLT_TUPOFLOW 8 /* Tuple stack overflow */
#define DTRACEFLT_BADSTACK 9 /* Bad stack */
+#define DTRACEFLT_BADSIZE 10 /* Bad size */
+#define DTRACEFLT_INTERR 11 /* Internal error */
#define DTRACEFLT_LIBRARY 1000 /* Library-level fault */
diff --git a/libdtrace/dt_error.c b/libdtrace/dt_error.c
index 50229d271425..5267d23d856b 100644
--- a/libdtrace/dt_error.c
+++ b/libdtrace/dt_error.c
@@ -206,6 +206,8 @@ dtrace_faultstr(dtrace_hdl_t *dtp, int fault)
{ DTRACEFLT_UPRIV, "invalid user access" },
{ DTRACEFLT_TUPOFLOW, "tuple stack overflow" },
{ DTRACEFLT_BADSTACK, "bad stack" },
+ { DTRACEFLT_BADSIZE, "invalid size" },
+ { DTRACEFLT_INTERR, "internal error" },
{ DTRACEFLT_LIBRARY, "library-level fault" },
{ 0, NULL }
};
diff --git a/libdtrace/dt_handle.c b/libdtrace/dt_handle.c
index 6968b05200b1..ba598cb7861d 100644
--- a/libdtrace/dt_handle.c
+++ b/libdtrace/dt_handle.c
@@ -181,6 +181,7 @@ dt_handle_err(dtrace_hdl_t *dtp, dtrace_probedata_t *data)
case DTRACEFLT_BADADDR:
case DTRACEFLT_BADALIGN:
case DTRACEFLT_BADSTACK:
+ case DTRACEFLT_BADSIZE:
sprintf(details, " (0x%llx)", (u_longlong_t)err.dteda_addr);
break;
--
2.35.0.260.gb82b153193.dirty
More information about the DTrace-devel
mailing list