svn commit: r355747 - in head: . include lib/libc/stdlib lib/libxo
Ryan Libby
rlibby at gmail.com
Sat Dec 14 18:20:14 UTC 2019
On Sat, Dec 14, 2019 at 12:28 AM Conrad Meyer <cem at freebsd.org> wrote:
>
> Author: cem
> Date: Sat Dec 14 08:28:10 2019
> New Revision: 355747
> URL: https://svnweb.freebsd.org/changeset/base/355747
>
> Log:
> Deprecate sranddev(3) API
>
> It serves no useful purpose and wasn't as popular as its equally meritless
> cousin, srandomdev(3).
>
> Setting aside the problems with rand(3) in general, the problem with this
> interface is that the seed isn't shared with the caller (other than by
> attacking the output of the generator, which is trivial, but not a hallmark of
> pleasant API design). The (arguable) utility of rand(3) or random(3) is as a
> semi-fast simulation generator which produces consistent results from a given
> seed. These are mutually at odd. Furthermore, sometimes people got the
> mistaken impression that a high quality random seed meant a weak generator like
> rand(3) or random(3) could be used for things like cryptographic key
> generation. This is absolutely not so.
>
> The API was never part of a standard and was not widely used in tree. Existing
> in-tree uses have all been removed.
>
> Possible replacement in out of tree codebases:
>
> char buf[3];
> time_t t;
>
> time(t);
> strftime(buf, sizeof(buf), "%S", gmtime(&t));
> srand(atoi(buf));
>
> Relnotes: yes
>
> Modified:
> head/ObsoleteFiles.inc
> head/include/stdlib.h
> head/lib/libc/stdlib/Makefile.inc
> head/lib/libc/stdlib/Symbol.map
> head/lib/libc/stdlib/rand.3
> head/lib/libc/stdlib/rand.c
> head/lib/libxo/xo_config.h
>
> Modified: head/ObsoleteFiles.inc
> ==============================================================================
> --- head/ObsoleteFiles.inc Sat Dec 14 05:21:56 2019 (r355746)
> +++ head/ObsoleteFiles.inc Sat Dec 14 08:28:10 2019 (r355747)
> @@ -36,6 +36,8 @@
> # xargs -n1 | sort | uniq -d;
> # done
>
> +# 20191214: Removal of sranddev(3)
> +OLD_FILES+=usr/share/man/man3/sranddev.3.gz
> # 20191213: remove timeout(9)
> OLD_FILES+=usr/share/man/man9/timeout.9.gz
> OLD_FILES+=usr/share/man/man9/untimeout.9.gz
>
> Modified: head/include/stdlib.h
> ==============================================================================
> --- head/include/stdlib.h Sat Dec 14 05:21:56 2019 (r355746)
> +++ head/include/stdlib.h Sat Dec 14 08:28:10 2019 (r355747)
> @@ -309,12 +309,17 @@ int rpmatch(const char *);
> void setprogname(const char *);
> int sradixsort(const unsigned char **, int, const unsigned char *,
> unsigned);
> -void sranddev(void);
> void srandomdev(void);
> long long
> strtonum(const char *, long long, long long, const char **);
>
> /* Deprecated interfaces, to be removed. */
> +static inline void
> +__attribute__((__deprecated__("sranddev to be removed in FreeBSD 13")))
> +sranddev(void)
> +{
> +}
> +
This broke some gcc builds in ci. It looks like older versions of gcc
don't like having an argument to deprecated.
> __int64_t
> strtoq(const char *, char **, int);
> __uint64_t
>
> Modified: head/lib/libc/stdlib/Makefile.inc
> ==============================================================================
> --- head/lib/libc/stdlib/Makefile.inc Sat Dec 14 05:21:56 2019 (r355746)
> +++ head/lib/libc/stdlib/Makefile.inc Sat Dec 14 08:28:10 2019 (r355747)
> @@ -52,7 +52,7 @@ MLINKS+=insque.3 remque.3
> MLINKS+=lsearch.3 lfind.3
> MLINKS+=ptsname.3 grantpt.3 ptsname.3 unlockpt.3
> MLINKS+=qsort.3 heapsort.3 qsort.3 mergesort.3 qsort.3 qsort_r.3
> -MLINKS+=rand.3 rand_r.3 rand.3 srand.3 rand.3 sranddev.3
> +MLINKS+=rand.3 rand_r.3 rand.3 srand.3
> MLINKS+=random.3 initstate.3 random.3 setstate.3 random.3 srandom.3 \
> random.3 srandomdev.3
> MLINKS+=radixsort.3 sradixsort.3
>
> Modified: head/lib/libc/stdlib/Symbol.map
> ==============================================================================
> --- head/lib/libc/stdlib/Symbol.map Sat Dec 14 05:21:56 2019 (r355746)
> +++ head/lib/libc/stdlib/Symbol.map Sat Dec 14 08:28:10 2019 (r355747)
> @@ -56,7 +56,6 @@ FBSD_1.0 {
> rand_r;
> rand;
> srand;
> - sranddev;
> srandom;
> srandomdev;
> initstate;
>
> Modified: head/lib/libc/stdlib/rand.3
> ==============================================================================
> --- head/lib/libc/stdlib/rand.3 Sat Dec 14 05:21:56 2019 (r355746)
> +++ head/lib/libc/stdlib/rand.3 Sat Dec 14 08:28:10 2019 (r355747)
> @@ -32,13 +32,12 @@
> .\" @(#)rand.3 8.1 (Berkeley) 6/4/93
> .\" $FreeBSD$
> .\"
> -.Dd April 22, 2019
> +.Dd December 14, 2019
> .Dt RAND 3
> .Os
> .Sh NAME
> .Nm rand ,
> .Nm srand ,
> -.Nm sranddev ,
> .Nm rand_r
> .Nd bad random number generator
> .Sh LIBRARY
> @@ -47,8 +46,6 @@
> .In stdlib.h
> .Ft void
> .Fn srand "unsigned seed"
> -.Ft void
> -.Fn sranddev void
> .Ft int
> .Fn rand void
> .Ft int
> @@ -90,10 +87,6 @@ value is provided, the functions are automatically
> seeded with a value of 1.
> .Pp
> The
> -.Fn sranddev
> -function initializes a seed using pseudo-random numbers obtained from the kernel.
> -.Pp
> -The
> .Fn rand_r
> function
> provides the same functionality as
> @@ -122,4 +115,5 @@ conform to
> .Pp
> The
> .Fn rand_r
> -function is as proposed in the POSIX.4a Draft #6 document.
> +function is marked as obsolescent in POSIX and may be removed in a future
> +revision of the standard.
>
> Modified: head/lib/libc/stdlib/rand.c
> ==============================================================================
> --- head/lib/libc/stdlib/rand.c Sat Dec 14 05:21:56 2019 (r355746)
> +++ head/lib/libc/stdlib/rand.c Sat Dec 14 08:28:10 2019 (r355747)
> @@ -40,7 +40,9 @@ __FBSDID("$FreeBSD$");
> #include "namespace.h"
> #include <sys/param.h>
> #include <sys/sysctl.h>
> +#include <stdbool.h>
> #include <stdlib.h>
> +#include <syslog.h>
> #include "un-namespace.h"
>
> #ifdef TEST
> @@ -102,25 +104,18 @@ srand(unsigned seed)
> }
>
>
> -/*
> - * sranddev:
> - *
> - * Many programs choose the seed value in a totally predictable manner.
> - * This often causes problems. We seed the generator using pseudo-random
> - * data from the kernel.
> - */
> +void __sranddev_fbsd12(void);
> void
> -sranddev(void)
> +__sranddev_fbsd12(void)
> {
> - int mib[2];
> - size_t len;
> + static bool warned = false;
>
> - len = sizeof(next);
> -
> - mib[0] = CTL_KERN;
> - mib[1] = KERN_ARND;
> - sysctl(mib, 2, (void *)&next, &len, NULL, 0);
> + if (!warned) {
> + syslog(LOG_DEBUG, "Deprecated function sranddev() called");
> + warned = true;
> + }
> }
> +__sym_compat(sranddev, __sranddev_fbsd12, FBSD_1.0);
>
>
> #ifdef TEST
>
> Modified: head/lib/libxo/xo_config.h
> ==============================================================================
> --- head/lib/libxo/xo_config.h Sat Dec 14 05:21:56 2019 (r355746)
> +++ head/lib/libxo/xo_config.h Sat Dec 14 08:28:10 2019 (r355747)
> @@ -102,7 +102,7 @@
> #define HAVE_SRAND 1
>
> /* Define to 1 if you have the `sranddev' function. */
> -#define HAVE_SRANDDEV 1
> +/* #undef HAVE_SRANDDEV */
>
> /* Define to 1 if you have the <stdint.h> header file. */
> #define HAVE_STDINT_H 1
> _______________________________________________
> svn-src-all at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
More information about the svn-src-all
mailing list