diff options
-rw-r--r-- | sys/kern/kern_mib.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/sys/kern/kern_mib.c b/sys/kern/kern_mib.c index 74f05f9..b8ce527 100644 --- a/sys/kern/kern_mib.c +++ b/sys/kern/kern_mib.c @@ -154,14 +154,18 @@ SYSCTL_INT(_hw, HW_PAGESIZE, pagesize, CTLFLAG_RD, static int sysctl_kern_arnd(SYSCTL_HANDLER_ARGS) { - u_long val; - - arc4rand(&val, sizeof(val), 0); - return (sysctl_handle_long(oidp, &val, 0, req)); + char buf[256]; + size_t len; + + len = req->oldlen; + if (len > sizeof(buf)) + len = sizeof(buf); + arc4rand(buf, len, 0); + return (SYSCTL_OUT(req, buf, len)); } -SYSCTL_PROC(_kern, KERN_ARND, arandom, CTLFLAG_RD, - 0, 0, sysctl_kern_arnd, "L", "arc4rand"); +SYSCTL_PROC(_kern, KERN_ARND, arandom, CTLTYPE_OPAQUE | CTLFLAG_RD, + NULL, 0, sysctl_kern_arnd, "", "arc4rand"); static int sysctl_hw_physmem(SYSCTL_HANDLER_ARGS) |