xref: /netbsd-src/tests/sbin/sysctl/t_random_garbage.sh (revision 3f94c7658e756bfc2bfd1e10c01b333c256632ef)
1*3f94c765Sjruoho# $NetBSD: t_random_garbage.sh,v 1.4 2020/07/27 07:36:19 jruoho Exp $
2313072e7Sjruoho#
3313072e7Sjruoho# Copyright (c) 2020 The NetBSD Foundation, Inc.
4313072e7Sjruoho# All rights reserved.
5313072e7Sjruoho#
6313072e7Sjruoho# This code is derived from software contributed to The NetBSD Foundation
7313072e7Sjruoho# by Jukka Ruohonen.
8313072e7Sjruoho#
9313072e7Sjruoho# Redistribution and use in source and binary forms, with or without
10313072e7Sjruoho# modification, are permitted provided that the following conditions
11313072e7Sjruoho# are met:
12313072e7Sjruoho# 1. Redistributions of source code must retain the above copyright
13313072e7Sjruoho#    notice, this list of conditions and the following disclaimer.
14313072e7Sjruoho# 2. Redistributions in binary form must reproduce the above copyright
15313072e7Sjruoho#    notice, this list of conditions and the following disclaimer in the
16313072e7Sjruoho#    documentation and/or other materials provided with the distribution.
17313072e7Sjruoho#
18313072e7Sjruoho# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19313072e7Sjruoho# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20313072e7Sjruoho# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21313072e7Sjruoho# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22313072e7Sjruoho# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23313072e7Sjruoho# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24313072e7Sjruoho# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25313072e7Sjruoho# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26313072e7Sjruoho# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27313072e7Sjruoho# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28313072e7Sjruoho# POSSIBILITY OF SUCH DAMAGE.
29313072e7Sjruoho#
30313072e7Sjruohotmp="/tmp/sysctl.out"
31313072e7Sjruoho
32313072e7Sjruohogetrint() {
33313072e7Sjruoho	echo $(od -An -N2 -i /dev/urandom | sed 's/ //')
34313072e7Sjruoho}
35313072e7Sjruoho
36313072e7Sjruohogetrstr() {
37313072e7Sjruoho	echo $(cat /dev/urandom | head -n 1 | base64)
38313072e7Sjruoho}
39313072e7Sjruoho
40313072e7Sjruohoatf_test_case random_garbage cleanup
41313072e7Sjruohorandom_garbage_head() {
42313072e7Sjruoho	sysctl -a > $tmp
43313072e7Sjruoho	atf_set "require.user" "root"
447b69662fSjruoho	atf_set "descr" "Test writing random garbage " \
457b69662fSjruoho		"to sysctl nodes (PR kern/55451)"
46313072e7Sjruoho}
47313072e7Sjruoho
48313072e7Sjruohorandom_garbage_body() {
49313072e7Sjruoho
50*3f94c765Sjruoho	if ! [ $(atf_config_get "run_unsafe" "no") = "yes" ]; then
517b69662fSjruoho		atf_skip "The test is not safe (PR kern/55451)"
52*3f94c765Sjruoho	fi
53313072e7Sjruoho
54313072e7Sjruoho	while read line; do
55313072e7Sjruoho
56313072e7Sjruoho		var=$(echo $line | awk '{print $1}')
57313072e7Sjruoho
58313072e7Sjruoho		case $var in
596d91546dSjruoho			hw.acpi.sleep.state)
606d91546dSjruoho			echo "Skipping $var"
616d91546dSjruoho			continue
626d91546dSjruoho			;;
636d91546dSjruoho
64313072e7Sjruoho			kern.securelevel*)
65313072e7Sjruoho			echo "Skipping $var"
66313072e7Sjruoho			continue
67313072e7Sjruoho			;;
68313072e7Sjruoho
696d91546dSjruoho			kern.veriexec.strict)
706d91546dSjruoho			echo "Skipping $var"
716d91546dSjruoho			continue
726d91546dSjruoho			;;
736d91546dSjruoho
74313072e7Sjruoho			security*)
75313072e7Sjruoho			echo "Skipping $var"
76313072e7Sjruoho			continue
77313072e7Sjruoho			;;
78313072e7Sjruoho		esac
79313072e7Sjruoho
80313072e7Sjruoho		val=$(getrint)
81313072e7Sjruoho		echo "Write $var -> $val"
82313072e7Sjruoho		sysctl -w $var=$val
83313072e7Sjruoho		val=$(getrstr)
84313072e7Sjruoho		echo "Write $var -> $val"
85313072e7Sjruoho		sysctl -w $var=$val
86313072e7Sjruoho
87313072e7Sjruoho	done < $tmp
88313072e7Sjruoho}
89313072e7Sjruoho
90313072e7Sjruohorandom_garbage_cleanup() {
91313072e7Sjruoho
92*3f94c765Sjruoho	if ! [ $(atf_config_get "run_unsafe" "no") = "yes" ]; then
937b69662fSjruoho		atf_skip "The test is not safe (PR kern/55451)"
94*3f94c765Sjruoho	fi
95313072e7Sjruoho
96313072e7Sjruoho	while read line; do
97313072e7Sjruoho		var=$(echo $line | awk '{print $1}')
98313072e7Sjruoho		val=$(echo $line | awk '{print $3}')
99313072e7Sjruoho		echo "Restoring $var -> $val"
100313072e7Sjruoho		sysctl -w $var=$val > /dev/null 2>&1
101313072e7Sjruoho	done < $tmp
102313072e7Sjruoho
103313072e7Sjruoho	rm $tmp
104313072e7Sjruoho}
105313072e7Sjruoho
106313072e7Sjruohoatf_init_test_cases() {
107313072e7Sjruoho	atf_add_test_case random_garbage
108313072e7Sjruoho}
109