1231437Sluigi 2252869Sdelphij. $(atf_get_srcdir)/conf.sh 3231437Sluigi 4231437Sluigicopy_test() { 5231437Sluigi cipher=$1 6231437Sluigi aalgo=$2 7231437Sluigi secsize=$3 8231437Sluigi ealgo=${cipher%%:*} 9231437Sluigi keylen=${cipher##*:} 10231437Sluigi 11231437Sluigi atf_check -s exit:0 -e ignore \ 12231437Sluigi geli init -B none -a $aalgo -e $ealgo -l $keylen -P \ 13231437Sluigi -K keyfile -s $secsize ${md} 14231437Sluigi atf_check geli attach -p -k keyfile ${md} 15231437Sluigi 16231437Sluigi atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=1 status=none 17231437Sluigi 18231437Sluigi # Copy first small sector to the second small sector. 19231437Sluigi # This should be detected as corruption. 20231437Sluigi atf_check dd if=backing_file of=sector bs=512 count=1 \ 21231437Sluigi conv=notrunc status=none 22231437Sluigi atf_check dd if=sector of=backing_file bs=512 count=1 seek=1 \ 23231437Sluigi conv=notrunc status=none 24231437Sluigi 25231437Sluigi atf_check -s not-exit:0 -e ignore \ 26231437Sluigi dd if=/dev/${md}.eli of=/dev/null bs=${secsize} count=1 27231437Sluigi 28231437Sluigi # Fix the corruption 29231437Sluigi atf_check dd if=rnd of=/dev/${md}.eli bs=${secsize} count=2 status=none 30231437Sluigi atf_check dd if=/dev/${md}.eli of=/dev/null bs=${secsize} count=2 \ 31231437Sluigi status=none 32231437Sluigi 33231437Sluigi # Copy first big sector to the second big sector. 34231437Sluigi # This should be detected as corruption. 35231437Sluigi ms=`diskinfo /dev/${md} | awk '{print $3 - 512}'` 36231437Sluigi ns=`diskinfo /dev/${md}.eli | awk '{print $4}'` 37231437Sluigi usecsize=`echo "($ms / $ns) - (($ms / $ns) % 512)" | bc` 38231437Sluigi atf_check dd if=backing_file bs=512 count=$(( ${usecsize} / 512 )) \ 39231437Sluigi seek=$(( $secsize / 512 )) of=sector conv=notrunc status=none 40231437Sluigi atf_check dd of=backing_file bs=512 count=$(( ${usecsize} / 512 )) \ 41231437Sluigi seek=$(( $secsize / 256 )) if=sector conv=notrunc status=none 42231437Sluigi atf_check -s not-exit:0 -e ignore \ 43231437Sluigi dd if=/dev/${md}.eli of=/dev/null bs=${secsize} count=$ns 44231437Sluigi} 45231437Sluigi 46231437Sluigiatf_test_case copy cleanup 47231437Sluigicopy_head() 48231437Sluigi{ 49231437Sluigi atf_set "descr" "geli will detect misdirected writes as corruption" 50231437Sluigi atf_set "require.user" "root" 51231437Sluigi atf_set "timeout" 3600 52231437Sluigi} 53231437Sluigicopy_body() 54231437Sluigi{ 55231437Sluigi geli_test_setup 56231437Sluigi 57231437Sluigi sectors=2 58231437Sluigi 59231437Sluigi atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none 60231437Sluigi dd if=/dev/random of=rnd bs=${MAX_SECSIZE} count=${sectors} status=none 61231437Sluigi 62231437Sluigi for_each_geli_config copy_test backing_file 63231437Sluigi} 64231437Sluigicopy_cleanup() 65231437Sluigi{ 66231437Sluigi geli_test_cleanup 67231437Sluigi} 68231437Sluigi 69231437Sluigi 70231437Sluigidata_test() { 71231437Sluigi cipher=$1 72231437Sluigi aalgo=$2 73231437Sluigi secsize=$3 74231437Sluigi ealgo=${cipher%%:*} 75231437Sluigi keylen=${cipher##*:} 76231437Sluigi 77231437Sluigi atf_check -s exit:0 -e ignore \ 78231437Sluigi geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K keyfile \ 79231437Sluigi -s $secsize ${md} 80231437Sluigi 81231437Sluigi # Corrupt 8 bytes of data. 82231437Sluigi atf_check dd if=/dev/${md} of=sector bs=512 count=1 status=none 83231437Sluigi atf_check dd if=rnd of=sector bs=1 count=8 seek=64 conv=notrunc status=none 84231437Sluigi atf_check dd if=sector of=/dev/${md} bs=512 count=1 status=none 85231437Sluigi atf_check geli attach -p -k keyfile ${md} 86231437Sluigi 87231437Sluigi # Try to read from the corrupt sector 88231437Sluigi atf_check -s not-exit:0 -e ignore \ 89231437Sluigi dd if=/dev/${md}.eli of=/dev/null bs=${secsize} count=1 90231437Sluigi} 91231437Sluigi 92247880Sdelphijatf_test_case data cleanup 93231437Sluigidata_head() 94231437Sluigi{ 95231437Sluigi atf_set "descr" "With HMACs, geli will detect data corruption" 96231437Sluigi atf_set "require.user" "root" 97231437Sluigi atf_set "timeout" 1800 98231437Sluigi} 99231437Sluigidata_body() 100231437Sluigi{ 101231437Sluigi geli_test_setup 102231437Sluigi 103231437Sluigi sectors=2 104231437Sluigi 105231437Sluigi atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none 106252869Sdelphij dd if=/dev/random of=rnd bs=${MAX_SECSIZE} count=${sectors} status=none 107231437Sluigi for_each_geli_config data_test 108231437Sluigi} 109231437Sluigidata_cleanup() 110231437Sluigi{ 111231437Sluigi geli_test_cleanup 112231437Sluigi} 113231437Sluigi 114231437Sluigihmac_test() { 115231437Sluigi cipher=$1 116231437Sluigi aalgo=$2 117247880Sdelphij secsize=$3 118247880Sdelphij ealgo=${cipher%%:*} 119247880Sdelphij keylen=${cipher##*:} 120247880Sdelphij 121247880Sdelphij atf_check -s exit:0 -e ignore \ 122247880Sdelphij geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K keyfile \ 123247880Sdelphij -s $secsize ${md} 124231437Sluigi 125231437Sluigi # Corrupt 8 bytes of HMAC. 126231437Sluigi atf_check dd if=/dev/${md} of=sector bs=512 count=1 status=none 127231437Sluigi atf_check dd if=rnd of=sector bs=1 count=16 conv=notrunc status=none 128231437Sluigi atf_check dd if=sector of=/dev/${md} bs=512 count=1 status=none 129231437Sluigi atf_check geli attach -p -k keyfile ${md} 130231437Sluigi 131231437Sluigi # Try to read from the corrupt sector 132231437Sluigi atf_check -s not-exit:0 -e ignore \ 133231437Sluigi dd if=/dev/${md}.eli of=/dev/null bs=${secsize} count=1 134231437Sluigi} 135231437Sluigi 136231437Sluigiatf_test_case hmac cleanup 137231437Sluigihmac_head() 138231437Sluigi{ 139231437Sluigi atf_set "descr" "geli will detect corruption of HMACs" 140231437Sluigi atf_set "require.user" "root" 141231437Sluigi atf_set "timeout" 1800 142231437Sluigi} 143231437Sluigihmac_body() 144231437Sluigi{ 145231437Sluigi geli_test_setup 146231437Sluigi 147231437Sluigi sectors=2 148231437Sluigi 149231437Sluigi atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none 150231437Sluigi dd if=/dev/random of=rnd bs=${MAX_SECSIZE} count=${sectors} status=none 151231437Sluigi for_each_geli_config hmac_test 152231437Sluigi} 153231437Sluigihmac_cleanup() 154231437Sluigi{ 155231437Sluigi geli_test_cleanup 156231437Sluigi} 157231437Sluigi 158231437Sluigiatf_init_test_cases() 159231437Sluigi{ 160231437Sluigi atf_add_test_case copy 161231437Sluigi atf_add_test_case data 162231437Sluigi atf_add_test_case hmac 163231437Sluigi} 164231437Sluigi