aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_ktrace.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c
index 1c6a2ae01f3d..2b311f2d36dc 100644
--- a/sys/kern/kern_ktrace.c
+++ b/sys/kern/kern_ktrace.c
@@ -958,9 +958,16 @@ ktrcapfail(enum ktr_cap_violation type, const void *data)
case CAPFAIL_PROTO:
kcd->cap_int = *(const int *)data;
break;
- case CAPFAIL_SOCKADDR:
- kcd->cap_sockaddr = *(const struct sockaddr *)data;
+ case CAPFAIL_SOCKADDR: {
+ size_t len;
+
+ len = MIN(((const struct sockaddr *)data)->sa_len,
+ sizeof(kcd->cap_sockaddr));
+ memset(&kcd->cap_sockaddr, 0,
+ sizeof(kcd->cap_sockaddr));
+ memcpy(&kcd->cap_sockaddr, data, len);
break;
+ }
case CAPFAIL_NAMEI:
strlcpy(kcd->cap_path, data, MAXPATHLEN);
break;