summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_ktrace.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_ktrace.c')
-rw-r--r--sys/kern/kern_ktrace.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c
index 8685eb1..a8aa2b9 100644
--- a/sys/kern/kern_ktrace.c
+++ b/sys/kern/kern_ktrace.c
@@ -226,6 +226,10 @@ ktr_getrequest(int type)
if (req != NULL) {
STAILQ_REMOVE_HEAD(&ktr_free, ktr_list);
req->ktr_header.ktr_type = type;
+ if (p->p_traceflag & KTRFAC_DROP) {
+ req->ktr_header.ktr_type |= KTR_DROP;
+ p->p_traceflag &= ~KTRFAC_DROP;
+ }
KASSERT(p->p_tracevp != NULL, ("ktrace: no trace vnode"));
KASSERT(p->p_tracecred != NULL, ("ktrace: no trace cred"));
req->ktr_vp = p->p_tracevp;
@@ -238,6 +242,7 @@ ktr_getrequest(int type)
req->ktr_header.ktr_buffer = NULL;
req->ktr_header.ktr_len = 0;
} else {
+ p->p_traceflag |= KTRFAC_DROP;
pm = print_message;
print_message = 0;
mtx_unlock(&ktrace_mtx);
@@ -762,7 +767,7 @@ ktr_writerequest(struct ktr_request *req)
if (vp == NULL)
return;
kth = &req->ktr_header;
- datalen = data_lengths[kth->ktr_type];
+ datalen = data_lengths[(ushort)kth->ktr_type & ~KTR_DROP];
buflen = kth->ktr_len;
cred = req->ktr_cred;
td = curthread;
OpenPOWER on IntegriCloud