summaryrefslogtreecommitdiffstats
path: root/tapset/conversions.stp
diff options
context:
space:
mode:
Diffstat (limited to 'tapset/conversions.stp')
-rw-r--r--tapset/conversions.stp16
1 files changed, 16 insertions, 0 deletions
diff --git a/tapset/conversions.stp b/tapset/conversions.stp
index 51f9de19..9d50ca62 100644
--- a/tapset/conversions.stp
+++ b/tapset/conversions.stp
@@ -41,3 +41,19 @@ function user_string:string (addr:long) %{
CONTEXT->last_error = errmsg;
}
%}
+
+function user_string_safe:string (addr:long, n:long) %{
+ long rc;
+ if (n > MAXSTRINGLEN)
+ n = MAXSTRINGLEN;
+ rc = _stp_strncpy_from_user (THIS->__retvalue,
+ (const char __user*) (uintptr_t) THIS->addr,
+ MAXSTRINGLEN);
+ if (rc < 0)
+ {
+ static char errmsg[40];
+ snprintf (errmsg, 40, "user string copy fault at 0x%p",
+ (void *) (uintptr_t) THIS->addr);
+ CONTEXT->last_error = errmsg;
+ }
+%}