]> xenbits.xensource.com Git - people/julieng/freebsd.git/commitdiff
Use a regular sbuf + SYSCTL_OUT() rather than sbuf_new_for_sysctl() with
authorian <ian@FreeBSD.org>
Mon, 16 Mar 2015 19:18:45 +0000 (19:18 +0000)
committerian <ian@FreeBSD.org>
Mon, 16 Mar 2015 19:18:45 +0000 (19:18 +0000)
auto-draining, to avoid a potential copyout fault while holding a lock.

Pointed out by:   jhb
Pointy hat to:   ian

sys/kern/kern_fail.c

index e455c3c943eaed8b6372e676c8b953f85f1db147..3737aa3cf32f687be902a45caf92d8a23a1f6369 100644 (file)
@@ -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 */