diff options
author | antoine <antoine@FreeBSD.org> | 2008-02-17 16:44:48 +0000 |
---|---|---|
committer | antoine <antoine@FreeBSD.org> | 2008-02-17 16:44:48 +0000 |
commit | fb176dbab66759b96b2449f170e64b0aac6cf50b (patch) | |
tree | 4c76cc981d85e06484a44187ad9be706495c6943 /sys/kern/kern_mib.c | |
parent | aa983b9c64c9a623683dd26ce72ad547d844a297 (diff) | |
download | FreeBSD-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.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) |