-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Am Fri, 19 Apr 2019 20:05:48 +0000 (UTC)
Conrad Meyer <c...@freebsd.org> schrieb:

> Author: cem
> Date: Fri Apr 19 20:05:47 2019
> New Revision: 346410
> URL: https://svnweb.freebsd.org/changeset/base/346410
> 
> Log:
>   libkern: Bring in arc4random_uniform(9) from libc
>   
>   It is a useful arc4random wrapper in the kernel for much the same reasons as
>   in userspace.  Move the source to libkern (because kernel build is
>   restricted to sys/, but userspace can include any file it likes) and build
>   kernel and libc versions from the same source file.
>   
>   Copy the documentation from arc4random_uniform(3) to the section 9 page.
>   
>   While here, add missing arc4random_buf(9) symlink.
>   
>   Sponsored by:       Dell EMC Isilon
> 
> Added:
>   head/sys/libkern/arc4random_uniform.c
>      - copied, changed from r346409, head/lib/libc/gen/arc4random_uniform.c
> Deleted:
>   head/lib/libc/gen/arc4random_uniform.c
> Modified:
>   head/lib/libc/gen/Makefile.inc
>   head/share/man/man9/Makefile
>   head/share/man/man9/random.9
>   head/sys/conf/files
>   head/sys/sys/libkern.h
> 
> Modified: head/lib/libc/gen/Makefile.inc
> ==============================================================================
> --- head/lib/libc/gen/Makefile.inc    Fri Apr 19 19:45:19 2019        
> (r346409)
> +++ head/lib/libc/gen/Makefile.inc    Fri Apr 19 20:05:47 2019        
> (r346410)
> @@ -3,6 +3,7 @@
>  
>  # machine-independent gen sources
>  .PATH: ${LIBC_SRCTOP}/${LIBC_ARCH}/gen ${LIBC_SRCTOP}/gen
> +.PATH: ${SRCTOP}/sys/libkern
>  
>  CONFS=       shells
>  
> 
> Modified: head/share/man/man9/Makefile
> ==============================================================================
> --- head/share/man/man9/Makefile      Fri Apr 19 19:45:19 2019        
> (r346409)
> +++ head/share/man/man9/Makefile      Fri Apr 19 20:05:47 2019        
> (r346410)
> @@ -1668,6 +1668,8 @@ MLINKS+=psignal.9 gsignal.9 \
>       psignal.9 tdsignal.9
>  MLINKS+=random.9 arc4rand.9 \
>       random.9 arc4random.9 \
> +     random.9 arc4random_buf.9 \
> +     random.9 arc4random_uniform.9 \
>       random.9 is_random_seeded.9 \
>       random.9 read_random.9 \
>       random.9 read_random_uio.9 \
> 
> Modified: head/share/man/man9/random.9
> ==============================================================================
> --- head/share/man/man9/random.9      Fri Apr 19 19:45:19 2019        
> (r346409)
> +++ head/share/man/man9/random.9      Fri Apr 19 20:05:47 2019        
> (r346410)
> @@ -26,7 +26,7 @@
>  .\"
>  .\" $FreeBSD$
>  .\" "
> -.Dd April 16, 2019
> +.Dd April 19, 2019
>  .Dt RANDOM 9
>  .Os
>  .Sh NAME
> @@ -45,6 +45,8 @@
>  .Fn arc4random "void"
>  .Ft void
>  .Fn arc4random_buf "void *ptr" "size_t len"
> +.Ft uint32_t
> +.Fn arc4random_uniform "uint32_t upper_bound"
>  .Ft void
>  .Fn arc4rand "void *ptr" "u_int length" "int reseed"
>  .Pp
> @@ -79,6 +81,15 @@ fills
>  with
>  .Fa len
>  bytes of random data.
> +.Pp
> +.Fn arc4random_uniform
> +will return a single 32-bit value, uniformly distributed but less than
> +.Fa upper_bound .
> +This is recommended over constructions like
> +.Dq Li arc4random() % upper_bound
> +as it avoids "modulo bias" when the upper bound is not a power of two.
> +In the worst case, this function may consume multiple iterations
> +to ensure uniformity.
>  .Pp
>  The
>  .Fn arc4rand
> 
> Modified: head/sys/conf/files
> ==============================================================================
> --- head/sys/conf/files       Fri Apr 19 19:45:19 2019        (r346409)
> +++ head/sys/conf/files       Fri Apr 19 20:05:47 2019        (r346410)
> @@ -3985,6 +3985,7 @@ kgssapi/gsstest.c               optional kgssapi_debug
>  # the file should be moved to conf/files.<arch> from here.
>  #
>  libkern/arc4random.c         standard
> +libkern/arc4random_uniform.c standard
>  crypto/chacha20/chacha.c     standard
>  libkern/asprintf.c           standard
>  libkern/bcd.c                        standard
> 
> Copied and modified: head/sys/libkern/arc4random_uniform.c (from r346409,
> head/lib/libc/gen/arc4random_uniform.c)
> ==============================================================================
>  ---
> head/lib/libc/gen/arc4random_uniform.c        Fri Apr 19 19:45:19 2019        
> (r346409, copy
> source) +++ head/sys/libkern/arc4random_uniform.c     Fri Apr 19 20:05:47 2019
> (r346410) @@ -19,7 +19,11 @@ */
>  
>  #include <sys/types.h>
> +#ifdef _KERNEL
> +#include <sys/libkern.h>
> +#else
>  #include <stdlib.h>
> +#endif
>  
>  /*
>   * Calculate a uniformly distributed random number less than upper_bound
> 
> Modified: head/sys/sys/libkern.h
> ==============================================================================
> --- head/sys/sys/libkern.h    Fri Apr 19 19:45:19 2019        (r346409)
> +++ head/sys/sys/libkern.h    Fri Apr 19 20:05:47 2019        (r346410)
> @@ -128,6 +128,7 @@ struct malloc_type;
>  uint32_t arc4random(void);
>  void  arc4random_buf(void *, size_t);
>  void  arc4rand(void *, u_int, int);
> +uint32_t arc4random_uniform(uint32_t);
>  int   timingsafe_bcmp(const void *, const void *, size_t);
>  void *bsearch(const void *, const void *, size_t,
>           size_t, int (*)(const void *, const void *));
> _______________________________________________
> svn-src-h...@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

After applying r346410 to our source tree, buildworld fails (WITH_META_MODE is 
set):

[...]
Building /usr/obj/usr/src/amd64.amd64/lib/libc/ev_timers.o
- --- inet_ntoa.o ---
In file included from /usr/src/sys/libkern/inet_ntoa.c:34:
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/sys/systm.h:172:8: error: unknown 
type name 'bool'
extern bool dynamic_kenv;
       ^
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/sys/systm.h:211:5: warning: 
declaration of
built-in function 'setjmp' requires inclusion of the header <setjmp.h>
[-Wbuiltin-requires-header] int     setjmp(struct _jmp_buf *) __returns_twice; ^
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/sys/systm.h:212:6: warning: 
declaration of
built-in function 'longjmp' requires inclusion of the header <setjmp.h>
[-Wbuiltin-requires-header] void    longjmp(struct _jmp_buf *, int) __dead2; ^
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/sys/systm.h:285:6: warning: 
incompatible
redeclaration of library function 'log' [-Wincompatible-library-redeclaration] 
void
log(int, const char *, ...) __printflike(2, 3); ^
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/sys/systm.h:285:6: note: 'log' is 
a builtin with
type 'double (double)' 
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/sys/systm.h:382:39: error:
unknown type name 'uintfptr_t'; did you mean 'uintptr_t'? void    profclock(int 
cnt, int
usermode, uintfptr_t pc); ^
/usr/obj/usr/src/amd64.amd64/tmp/usr/include/sys/_stdint.h:80:22: note: 
'uintptr_t' declared
here typedef __uintptr_t             uintptr_t;


Is there an include missing?

Kind regards,

O. Hartmann

- -- 
O. Hartmann

Ich widerspreche der Nutzung oder Übermittlung meiner Daten für
Werbezwecke oder für die Markt- oder Meinungsforschung (§ 28 Abs. 4 BDSG).
-----BEGIN PGP SIGNATURE-----

iHUEARYIAB0WIQSy8IBxAPDkqVBaTJ44N1ZZPba5RwUCXLo2swAKCRA4N1ZZPba5
R0AbAP42F/TyfmgkH3I9JQXtu22DDlw6aVoO4PN56VjAYVc7gQEAgo19vxDz2Zup
nYfyoiTMDlj1b08suIGn2qe+/JOJhAE=
=RqK9
-----END PGP SIGNATURE-----
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to