git: 2b84c4c39148 - stable/14 - dtrace: Use a size_t to represent a buffer size in the printm action
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 30 Sep 2025 21:14:46 UTC
The branch stable/14 has been updated by markj:
URL: https://cgit.FreeBSD.org/src/commit/?id=2b84c4c39148001b1f2455b0b047212d9e54d833
commit 2b84c4c39148001b1f2455b0b047212d9e54d833
Author: Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2025-09-10 14:33:58 +0000
Commit: Mark Johnston <markj@FreeBSD.org>
CommitDate: 2025-09-30 21:14:29 +0000
dtrace: Use a size_t to represent a buffer size in the printm action
printm is specific to the FreeBSD dtrace port. I believe it's
effectively the same as tracemem(), though printm apparently predates
it. It stores the size of the buffer of traced data inline. Currently
it represents that size using a uintptr_t, which isn't really right and
poses challenges when porting to CHERI because
`DTRACE_STORE(uintptr_t, ...` requires the destination to be suitably
aligned, but this isn't necessary since we're just storing a size.
Convert to using a size_t. This should be a no-op since
sizeof(uintptr_t) == sizeof(size_t) on non-CHERI platforms (and besides
that I don't see a reason to use printm() when tracemem() is available
and is simpler to use.)
Reviewed by: Domagoj Stolfa, avg
MFC after: 2 weeks
Sponsored by: Innovate UK
Differential Revision: https://reviews.freebsd.org/D52055
(cherry picked from commit 3877025f52ee205fe99ad4ff68229933d57e4bcb)
---
cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c | 9 ++++-----
sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c | 11 ++++++-----
2 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c
index a760642c33bb..56418d7283b6 100644
--- a/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c
+++ b/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c
@@ -2242,11 +2242,10 @@ dt_format_bytes_get(dtrace_hdl_t *dtp, caddr_t addr, size_t nbytes)
static int
dt_format_memory(dtrace_hdl_t *dtp, caddr_t addr)
{
-
- size_t nbytes = *((uintptr_t *) addr);
+ size_t nbytes = *((size_t *) addr);
char *s;
- s = dt_format_bytes_get(dtp, addr + sizeof(uintptr_t), nbytes);
+ s = dt_format_bytes_get(dtp, addr + sizeof(size_t), nbytes);
if (s == NULL)
return (-1);
@@ -2260,9 +2259,9 @@ static int
dt_print_memory(dtrace_hdl_t *dtp, FILE *fp, caddr_t addr)
{
int quiet = (dtp->dt_options[DTRACEOPT_QUIET] != DTRACEOPT_UNSET);
- size_t nbytes = *((uintptr_t *) addr);
+ size_t nbytes = *((size_t *) addr);
- return (dt_print_bytes(dtp, fp, addr + sizeof(uintptr_t),
+ return (dt_print_bytes(dtp, fp, addr + sizeof(size_t),
nbytes, 50, quiet, 1));
}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
index 7192df200ae2..8078f3f6d4b1 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c
@@ -7761,7 +7761,8 @@ dtrace_probe(dtrace_id_t id, uintptr_t arg0, uintptr_t arg1,
uintptr_t *memref = (uintptr_t *)(uintptr_t) val;
if (!DTRACE_INSCRATCHPTR(&mstate,
- (uintptr_t)memref, 2 * sizeof(uintptr_t))) {
+ (uintptr_t) memref,
+ sizeof (uintptr_t) + sizeof (size_t))) {
*flags |= CPU_DTRACE_BADADDR;
continue;
}
@@ -7773,21 +7774,21 @@ dtrace_probe(dtrace_id_t id, uintptr_t arg0, uintptr_t arg1,
* Check if the size exceeds the allocated
* buffer size.
*/
- if (size + sizeof(uintptr_t) > dp->dtdo_rtype.dtdt_size) {
+ if (size + sizeof (size_t) >
+ dp->dtdo_rtype.dtdt_size) {
/* Flag a drop! */
*flags |= CPU_DTRACE_DROP;
continue;
}
/* Store the size in the buffer first. */
- DTRACE_STORE(uintptr_t, tomax,
- valoffs, size);
+ DTRACE_STORE(size_t, tomax, valoffs, size);
/*
* Offset the buffer address to the start
* of the data.
*/
- valoffs += sizeof(uintptr_t);
+ valoffs += sizeof(size_t);
/*
* Reset to the memory address rather than