summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_mib.c
diff options
context:
space:
mode:
authorantoine <antoine@FreeBSD.org>2008-02-17 16:44:48 +0000
committerantoine <antoine@FreeBSD.org>2008-02-17 16:44:48 +0000
commitfb176dbab66759b96b2449f170e64b0aac6cf50b (patch)
tree4c76cc981d85e06484a44187ad9be706495c6943 /sys/kern/kern_mib.c
parentaa983b9c64c9a623683dd26ce72ad547d844a297 (diff)
downloadFreeBSD-src-fb176dbab66759b96b2449f170e64b0aac6cf50b.zip
FreeBSD-src-fb176dbab66759b96b2449f170e64b0aac6cf50b.tar.gz
Make sysctl_kern_arnd return a random buffer instead of a random long,
as it is expected by userland (stack protector guard setup for example). PR: 119129 Approved by: rwatson (mentor) MFC after: 1 month
Diffstat (limited to 'sys/kern/kern_mib.c')
-rw-r--r--sys/kern/kern_mib.c16
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)
OpenPOWER on IntegriCloud