1 1.4 jruoho # $NetBSD: t_random_garbage.sh,v 1.4 2020/07/27 07:36:19 jruoho Exp $ 2 1.1 jruoho # 3 1.1 jruoho # Copyright (c) 2020 The NetBSD Foundation, Inc. 4 1.1 jruoho # All rights reserved. 5 1.1 jruoho # 6 1.1 jruoho # This code is derived from software contributed to The NetBSD Foundation 7 1.1 jruoho # by Jukka Ruohonen. 8 1.1 jruoho # 9 1.1 jruoho # Redistribution and use in source and binary forms, with or without 10 1.1 jruoho # modification, are permitted provided that the following conditions 11 1.1 jruoho # are met: 12 1.1 jruoho # 1. Redistributions of source code must retain the above copyright 13 1.1 jruoho # notice, this list of conditions and the following disclaimer. 14 1.1 jruoho # 2. Redistributions in binary form must reproduce the above copyright 15 1.1 jruoho # notice, this list of conditions and the following disclaimer in the 16 1.1 jruoho # documentation and/or other materials provided with the distribution. 17 1.1 jruoho # 18 1.1 jruoho # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 19 1.1 jruoho # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 1.1 jruoho # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 1.1 jruoho # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 1.1 jruoho # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 1.1 jruoho # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 1.1 jruoho # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 1.1 jruoho # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 1.1 jruoho # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 1.1 jruoho # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 1.1 jruoho # POSSIBILITY OF SUCH DAMAGE. 29 1.1 jruoho # 30 1.1 jruoho getrint() { 31 1.1 jruoho echo $(od -An -N2 -i /dev/urandom | sed 's/ //') 32 1.1 jruoho } 33 1.1 jruoho 34 1.1 jruoho getrstr() { 35 1.1 jruoho echo $(cat /dev/urandom | head -n 1 | base64) 36 1.1 jruoho } 37 1.1 jruoho 38 1.1 jruoho write_garbage() { 39 1.1 jruoho val=$(getrint) 40 1.1 jruoho echo "Test $3: write to $1 opt $2 -> $val" 41 1.2 jruoho ifconfig $1 $2 $val >/dev/null 2>&1 42 1.1 jruoho val=$(getrstr) 43 1.1 jruoho echo "Test $3: write to $1 opt $2 -> $val" 44 1.2 jruoho ifconfig $1 $2 $val >/dev/null 2>&1 45 1.1 jruoho } 46 1.1 jruoho 47 1.1 jruoho atf_test_case random_garbage 48 1.1 jruoho random_garbage_head() { 49 1.1 jruoho atf_set "require.user" "root" 50 1.3 jruoho atf_set "descr" "Test writing random garbage to " \ 51 1.3 jruoho "ifconfig(8) options (PR kern/55451)" 52 1.1 jruoho } 53 1.1 jruoho 54 1.1 jruoho random_garbage_body() { 55 1.1 jruoho 56 1.1 jruoho # Please note: 57 1.1 jruoho # 58 1.1 jruoho # 1. As some drivers seem to have input validation issues, it may 59 1.1 jruoho # be possible that horrors are written directly to the hardware. 60 1.1 jruoho # 61 1.1 jruoho # 2. Even if the test passes, there is no easy way to restore 62 1.1 jruoho # the existing state/configuration of any given interface. 63 1.1 jruoho # 64 1.1 jruoho # Take care. 65 1.1 jruoho # 66 1.4 jruoho if ! [ $(atf_config_get "run_unsafe" "no") = "yes" ]; then 67 1.4 jruoho atf_skip "The test is not safe (PR kern/55451)" 68 1.4 jruoho fi 69 1.1 jruoho 70 1.1 jruoho opts="advbase advskew broadcast carpdev description \ 71 1.1 jruoho media mediaopt -mediaopt mode instance metric mtu \ 72 1.1 jruoho netmask state frag rts ssid nwid nwkey pass powersavesleep \ 73 1.1 jruoho bssid chan tunnel session cookie pltime prefixlen linkstr \ 74 1.1 jruoho vhid vlan vlanif -vlanif agrport -agrport vltime maxupd \ 75 1.1 jruoho syncdev syncpeer" 76 1.1 jruoho 77 1.1 jruoho for i in $(ifconfig -l); do 78 1.1 jruoho 79 1.1 jruoho ifconfig $i up 80 1.1 jruoho 81 1.1 jruoho for o in $opts; do 82 1.1 jruoho 83 1.1 jruoho n=10 84 1.1 jruoho 85 1.1 jruoho while [ $n -gt 0 ]; do 86 1.1 jruoho write_garbage $i $o $n 87 1.1 jruoho n=$(expr $n - 1) 88 1.1 jruoho done 89 1.1 jruoho done 90 1.1 jruoho done 91 1.1 jruoho 92 1.1 jruoho atf_pass 93 1.1 jruoho } 94 1.1 jruoho 95 1.1 jruoho atf_init_test_cases() { 96 1.1 jruoho atf_add_test_case random_garbage 97 1.1 jruoho } 98