1 1.14 martin # $NetBSD: t_cgd.sh,v 1.14 2022/11/30 17:49:09 martin Exp $ 2 1.1 pooka # 3 1.1 pooka # Copyright (c) 2010 The NetBSD Foundation, Inc. 4 1.1 pooka # All rights reserved. 5 1.1 pooka # 6 1.1 pooka # Redistribution and use in source and binary forms, with or without 7 1.1 pooka # modification, are permitted provided that the following conditions 8 1.1 pooka # are met: 9 1.1 pooka # 1. Redistributions of source code must retain the above copyright 10 1.1 pooka # notice, this list of conditions and the following disclaimer. 11 1.1 pooka # 2. Redistributions in binary form must reproduce the above copyright 12 1.1 pooka # notice, this list of conditions and the following disclaimer in the 13 1.1 pooka # documentation and/or other materials provided with the distribution. 14 1.1 pooka # 15 1.1 pooka # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 16 1.1 pooka # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 17 1.1 pooka # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 18 1.1 pooka # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 19 1.1 pooka # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20 1.1 pooka # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21 1.1 pooka # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 1.1 pooka # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 1.1 pooka # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24 1.1 pooka # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25 1.1 pooka # POSSIBILITY OF SUCH DAMAGE. 26 1.1 pooka # 27 1.1 pooka 28 1.14 martin rawpart=$( set -- a b c d e f g h i j k l m n o p q r s t u v w x y z; 29 1.14 martin shift $( sysctl -n kern.rawpartition ); printf %s "$1" ) 30 1.5 pooka rawcgd=/dev/rcgd0${rawpart} 31 1.4 pooka cgdserver=\ 32 1.4 pooka "rump_server -lrumpvfs -lrumpkern_crypto -lrumpdev -lrumpdev_disk -lrumpdev_cgd" 33 1.4 pooka 34 1.3 pooka atf_test_case basic cleanup 35 1.1 pooka basic_head() 36 1.1 pooka { 37 1.1 pooka 38 1.13 kre atf_set descr "Tests that encrypt/decrypt works" 39 1.13 kre atf_set require.progs rump_server 40 1.1 pooka } 41 1.1 pooka 42 1.1 pooka basic_body() 43 1.1 pooka { 44 1.1 pooka d=$(atf_get_srcdir) 45 1.2 pooka atf_check -s exit:0 \ 46 1.4 pooka ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock 47 1.2 pooka 48 1.2 pooka export RUMP_SERVER=unix://csock 49 1.9 jmmv atf_check -s exit:0 -x "echo 12345 | \ 50 1.2 pooka rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile" 51 1.9 jmmv atf_check -s exit:0 -e ignore -x \ 52 1.6 pooka "dd if=${d}/t_cgd count=2 | rump.dd of=${rawcgd}" 53 1.2 pooka atf_check -s exit:0 -e ignore dd if=${d}/t_cgd of=testfile count=2 54 1.6 pooka atf_check -s exit:0 -e ignore -o file:testfile \ 55 1.6 pooka rump.dd if=${rawcgd} count=2 56 1.2 pooka } 57 1.2 pooka 58 1.2 pooka basic_cleanup() 59 1.2 pooka { 60 1.8 jmmv env RUMP_SERVER=unix://csock rump.halt || true 61 1.1 pooka } 62 1.1 pooka 63 1.3 pooka atf_test_case wrongpass cleanup 64 1.1 pooka wrongpass_head() 65 1.1 pooka { 66 1.1 pooka 67 1.13 kre atf_set descr \ 68 1.13 kre "Tests that wrong password does not give original plaintext" 69 1.13 kre atf_set require.progs rump_server 70 1.1 pooka } 71 1.1 pooka 72 1.1 pooka wrongpass_body() 73 1.1 pooka { 74 1.1 pooka d=$(atf_get_srcdir) 75 1.2 pooka atf_check -s exit:0 \ 76 1.4 pooka ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock 77 1.2 pooka 78 1.2 pooka export RUMP_SERVER=unix://csock 79 1.13 kre atf_check -s exit:0 -x \ 80 1.13 kre "echo 12345 | rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile" 81 1.9 jmmv atf_check -s exit:0 -e ignore -x \ 82 1.6 pooka "dd if=${d}/t_cgd | rump.dd of=${rawcgd} count=2" 83 1.2 pooka 84 1.2 pooka # unconfig and reconfig cgd 85 1.2 pooka atf_check -s exit:0 rump.cgdconfig -u cgd0 86 1.13 kre atf_check -s exit:0 -x \ 87 1.13 kre "echo 54321 | rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile" 88 1.2 pooka 89 1.2 pooka atf_check -s exit:0 -e ignore dd if=${d}/t_cgd of=testfile count=2 90 1.2 pooka atf_check -s exit:0 -e ignore -o not-file:testfile \ 91 1.6 pooka rump.dd if=${rawcgd} count=2 92 1.1 pooka } 93 1.1 pooka 94 1.3 pooka wrongpass_cleanup() 95 1.3 pooka { 96 1.8 jmmv env RUMP_SERVER=unix://csock rump.halt || true 97 1.3 pooka } 98 1.3 pooka 99 1.7 pooka 100 1.10 riastrad atf_test_case unaligned_write cleanup 101 1.10 riastrad unaligned_write_head() 102 1.7 pooka { 103 1.13 kre atf_set descr "Attempt unaligned writes to a raw cgd device" 104 1.13 kre atf_set require.progs rump_server 105 1.7 pooka } 106 1.7 pooka 107 1.10 riastrad unaligned_write_body() 108 1.7 pooka { 109 1.7 pooka d=$(atf_get_srcdir) 110 1.7 pooka atf_check -s exit:0 \ 111 1.7 pooka ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock 112 1.7 pooka 113 1.7 pooka export RUMP_SERVER=unix://csock 114 1.13 kre atf_check -s exit:0 -x \ 115 1.13 kre "echo 12345 | rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile" 116 1.7 pooka 117 1.10 riastrad # Check that cgd rejects writes of totally bogus lengths. 118 1.10 riastrad atf_check -s not-exit:0 -e ignore -x \ 119 1.7 pooka "echo die hard | rump.dd of=${rawcgd} bs=123 conv=sync" 120 1.10 riastrad 121 1.10 riastrad # Check that cgd rejects non-sector-length writes even if they 122 1.10 riastrad # are integral multiples of the block size. 123 1.10 riastrad atf_check -s not-exit:0 -e ignore -x \ 124 1.10 riastrad "echo die hard | rump.dd of=${rawcgd} bs=64 conv=sync" 125 1.10 riastrad atf_check -s not-exit:0 -e ignore -x \ 126 1.10 riastrad "echo die hard | rump.dd of=${rawcgd} bs=256 conv=sync" 127 1.10 riastrad 128 1.10 riastrad # Check that cgd rejects misaligned buffers, produced by 129 1.10 riastrad # packetizing the input on bogus boundaries and using the 130 1.10 riastrad # bizarre behaviour of `bs=N' in dd. 131 1.10 riastrad atf_check -s not-exit:0 -e ignore -x \ 132 1.13 kre "(echo -n x && sleep 1 && head -c 511 </dev/zero) | 133 1.13 kre rump.dd of=${rawcgd} bs=512" 134 1.10 riastrad 135 1.10 riastrad # Check that cgd rejects sector-length writes if they are not 136 1.10 riastrad # on sector boundaries. Doesn't work because dd can't be 137 1.10 riastrad # persuaded to seek a non-integral multiple of the output 138 1.10 riastrad # buffer size and I can't be arsed to find the another way to 139 1.10 riastrad # do that. 140 1.10 riastrad #atf_check -s not-exit:0 -e ignore -x \ 141 1.10 riastrad # "echo die hard | rump.dd of=${rawcgd} seek=1 bs=512 conv=sync" 142 1.7 pooka } 143 1.7 pooka 144 1.10 riastrad unaligned_write_cleanup() 145 1.7 pooka { 146 1.8 jmmv env RUMP_SERVER=unix://csock rump.halt || true 147 1.7 pooka } 148 1.7 pooka 149 1.12 kre vmeth_failure_body() 150 1.12 kre { 151 1.12 kre local vmeth="$1" 152 1.12 kre local d=$(atf_get_srcdir) 153 1.12 kre 154 1.12 kre atf_check -s exit:0 \ 155 1.12 kre ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock 156 1.12 kre export RUMP_SERVER=unix://csock 157 1.13 kre atf_check -s not-exit:0 -e ignore -x \ 158 1.13 kre "echo 12345 | 159 1.13 kre rump.cgdconfig -V '${vmeth}' -p cgd0 /dev/dk ${d}/paramsfile" 160 1.13 kre atf_check -s exit:0 -o not-match:'(^| )cgd0( |$)' \ 161 1.13 kre rump.sysctl -n hw.disknames 162 1.12 kre } 163 1.12 kre 164 1.12 kre test_case_vmeth_failure() 165 1.12 kre { 166 1.12 kre local vmeth="${1}" 167 1.12 kre local name="vmeth_failure_${vmeth}" 168 1.12 kre 169 1.12 kre atf_test_case "${name}" cleanup 170 1.13 kre eval "${name}_head() { 171 1.13 kre atf_set descr 'Tests verification method \"${vmeth}\" failure' 172 1.13 kre atf_set require.progs rump_server 173 1.12 kre }" 174 1.13 kre eval "${name}_body() { 175 1.13 kre vmeth_failure_body '${vmeth}' 176 1.12 kre }" 177 1.13 kre eval "${name}_cleanup() { 178 1.13 kre rump.cgdconfig -u cgd0 2>/dev/null 179 1.13 kre env RUMP_SERVER=unix://csock rump.halt || true 180 1.12 kre }" 181 1.12 kre } 182 1.12 kre 183 1.12 kre test_case_vmeth_failure disklabel 184 1.12 kre test_case_vmeth_failure ffs 185 1.12 kre test_case_vmeth_failure gpt 186 1.12 kre test_case_vmeth_failure mbr 187 1.12 kre 188 1.1 pooka atf_init_test_cases() 189 1.1 pooka { 190 1.1 pooka atf_add_test_case basic 191 1.1 pooka atf_add_test_case wrongpass 192 1.10 riastrad atf_add_test_case unaligned_write 193 1.12 kre atf_add_test_case vmeth_failure_disklabel 194 1.12 kre atf_add_test_case vmeth_failure_ffs 195 1.12 kre atf_add_test_case vmeth_failure_gpt 196 1.12 kre atf_add_test_case vmeth_failure_mbr 197 1.1 pooka } 198