aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorIan Lepore <ian@FreeBSD.org>2015-03-16 19:18:45 +0000
committerIan Lepore <ian@FreeBSD.org>2015-03-16 19:18:45 +0000
commitba00885515860b1e51d7de5589b648cf6eb420e9 (patch)
treed0bb4319b537ffab7cee1646aeed7a7e9f909819 /sys
parent8d5628fdb87abd1fe73b31f1a6fc11610dc32ff4 (diff)
downloadsrc-ba00885515860b1e51d7de5589b648cf6eb420e9.tar.gz
src-ba00885515860b1e51d7de5589b648cf6eb420e9.zip
Use a regular sbuf + SYSCTL_OUT() rather than sbuf_new_for_sysctl() with
auto-draining, to avoid a potential copyout fault while holding a lock. Pointed out by: jhb Pointy hat to: ian
Notes
Notes: svn path=/head/; revision=280150
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_fail.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/kern/kern_fail.c b/sys/kern/kern_fail.c
index e455c3c943ea..3737aa3cf32f 100644
--- a/sys/kern/kern_fail.c
+++ b/sys/kern/kern_fail.c
@@ -394,10 +394,12 @@ fail_point_sysctl(SYSCTL_HANDLER_ARGS)
int error;
/* Retrieving */
- sbuf_new_for_sysctl(&sb, NULL, 128, req);
+ sbuf_new(&sb, NULL, 128, SBUF_AUTOEXTEND | SBUF_INCLUDENUL);
fail_point_get(fp, &sb);
sbuf_trim(&sb);
error = sbuf_finish(&sb);
+ if (error == 0)
+ error = SYSCTL_OUT(req, sbuf_data(&sb), sbuf_len(&sb));
sbuf_delete(&sb);
/* Setting */