1*2090d7b5Sjruoho /* $NetBSD: t_random.c,v 1.3 2012/03/29 08:56:06 jruoho Exp $ */
253263fa5Sjruoho
353263fa5Sjruoho /*-
453263fa5Sjruoho * Copyright (c) 2012 The NetBSD Foundation, Inc.
553263fa5Sjruoho * All rights reserved.
653263fa5Sjruoho *
753263fa5Sjruoho * This code is derived from software contributed to The NetBSD Foundation
853263fa5Sjruoho * by Jukka Ruohonen.
953263fa5Sjruoho *
1053263fa5Sjruoho * Redistribution and use in source and binary forms, with or without
1153263fa5Sjruoho * modification, are permitted provided that the following conditions
1253263fa5Sjruoho * are met:
1353263fa5Sjruoho * 1. Redistributions of source code must retain the above copyright
1453263fa5Sjruoho * notice, this list of conditions and the following disclaimer.
1553263fa5Sjruoho * 2. Redistributions in binary form must reproduce the above copyright
1653263fa5Sjruoho * notice, this list of conditions and the following disclaimer in the
1753263fa5Sjruoho * documentation and/or other materials provided with the distribution.
1853263fa5Sjruoho *
1953263fa5Sjruoho * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
2053263fa5Sjruoho * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2153263fa5Sjruoho * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2253263fa5Sjruoho * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2353263fa5Sjruoho * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2453263fa5Sjruoho * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2553263fa5Sjruoho * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2653263fa5Sjruoho * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2753263fa5Sjruoho * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2853263fa5Sjruoho * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2953263fa5Sjruoho * POSSIBILITY OF SUCH DAMAGE.
3053263fa5Sjruoho */
3153263fa5Sjruoho #include <sys/cdefs.h>
32*2090d7b5Sjruoho __RCSID("$NetBSD: t_random.c,v 1.3 2012/03/29 08:56:06 jruoho Exp $");
3353263fa5Sjruoho
3453263fa5Sjruoho #include <atf-c.h>
35*2090d7b5Sjruoho #include <stdio.h>
3653263fa5Sjruoho #include <stdlib.h>
3753263fa5Sjruoho
3853263fa5Sjruoho /*
3953263fa5Sjruoho * TODO: Add some general RNG tests (cf. the famous "diehard" tests?).
4053263fa5Sjruoho */
4153263fa5Sjruoho
42*2090d7b5Sjruoho ATF_TC(random_same);
ATF_TC_HEAD(random_same,tc)43*2090d7b5Sjruoho ATF_TC_HEAD(random_same, tc)
4453263fa5Sjruoho {
4553263fa5Sjruoho atf_tc_set_md_var(tc, "descr",
46*2090d7b5Sjruoho "Test that random(3) does not always return the same "
47*2090d7b5Sjruoho "value when the seed is initialized to zero");
4853263fa5Sjruoho }
4953263fa5Sjruoho
50*2090d7b5Sjruoho #define MAX_ITER 10
51*2090d7b5Sjruoho
ATF_TC_BODY(random_same,tc)52*2090d7b5Sjruoho ATF_TC_BODY(random_same, tc)
5353263fa5Sjruoho {
54*2090d7b5Sjruoho long buf[MAX_ITER];
5553263fa5Sjruoho size_t i, j;
5653263fa5Sjruoho
579ca3e292Sjruoho /*
589ca3e292Sjruoho * See CVE-2012-1577.
599ca3e292Sjruoho */
6053263fa5Sjruoho srandom(0);
6153263fa5Sjruoho
62*2090d7b5Sjruoho for (i = 0; i < __arraycount(buf); i++) {
6353263fa5Sjruoho
64*2090d7b5Sjruoho buf[i] = random();
65*2090d7b5Sjruoho
66*2090d7b5Sjruoho for (j = 0; j < i; j++) {
67*2090d7b5Sjruoho
68*2090d7b5Sjruoho (void)fprintf(stderr, "i = %zu, j = %zu: "
69*2090d7b5Sjruoho "%ld vs. %ld\n", i, j, buf[i], buf[j]);
70*2090d7b5Sjruoho
71*2090d7b5Sjruoho ATF_CHECK(buf[i] != buf[j]);
7253263fa5Sjruoho }
73*2090d7b5Sjruoho }
7453263fa5Sjruoho }
7553263fa5Sjruoho
ATF_TP_ADD_TCS(tp)7653263fa5Sjruoho ATF_TP_ADD_TCS(tp)
7753263fa5Sjruoho {
7853263fa5Sjruoho
79*2090d7b5Sjruoho ATF_TP_ADD_TC(tp, random_same);
8053263fa5Sjruoho
8153263fa5Sjruoho return atf_no_error();
8253263fa5Sjruoho }
83