Make kern.arandom truncate the output instead of failing with ETOOBIG

when the requested data exceeds 256 bytes in size. The actual size of
the returned data is output to oldlenp.

This matches FreeBSD's behaviour and seems to be more in line with
what software in the wild expects.

"sounds reasonble" - Riastradh
This commit is contained in:
nia 2020-04-30 17:36:06 +00:00
parent 1d76a251d8
commit 63629d9f87
1 changed files with 3 additions and 3 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: subr_cprng.c,v 1.36 2020/04/30 03:28:18 riastradh Exp $ */
/* $NetBSD: subr_cprng.c,v 1.37 2020/04/30 17:36:06 nia Exp $ */
/*-
* Copyright (c) 2019 The NetBSD Foundation, Inc.
@ -52,7 +52,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: subr_cprng.c,v 1.36 2020/04/30 03:28:18 riastradh Exp $");
__KERNEL_RCSID(0, "$NetBSD: subr_cprng.c,v 1.37 2020/04/30 17:36:06 nia Exp $");
#include <sys/types.h>
#include <sys/cprng.h>
@ -172,7 +172,7 @@ sysctl_kern_arandom(SYSCTLFN_ARGS)
* the past, so let's not break compatibility.
*/
if (*oldlenp > 256) /* size_t, so never negative */
return E2BIG;
*oldlenp = 256;
/* Generate data. */
cprng_strong(user_cprng, buf, *oldlenp, 0);