]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - tests/sys/geom/class/eli/integrity_copy_test.sh
MFC r368207,368607:
[FreeBSD/stable/10.git] / tests / sys / geom / class / eli / integrity_copy_test.sh
1 #!/bin/sh
2 # $FreeBSD$
3
4 . $(dirname $0)/conf.sh
5
6 base=`basename $0`
7 keyfile=`mktemp $base.XXXXXX` || exit 1
8 sector=`mktemp $base.XXXXXX` || exit 1
9
10 echo "1..2400"
11
12 do_test() {
13         cipher=$1
14         aalgo=$2
15         secsize=$3
16         ealgo=${cipher%%:*}
17         keylen=${cipher##*:}
18
19         mdconfig -a -t malloc -s `expr $secsize \* 2 + 512`b -u $no || exit 1
20         geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K $keyfile -s $secsize md${no} 2>/dev/null
21         geli attach -p -k $keyfile md${no}
22
23         dd if=/dev/random of=/dev/md${no}.eli bs=${secsize} count=1 >/dev/null 2>&1
24
25         dd if=/dev/md${no}.eli bs=${secsize} count=1 >/dev/null 2>&1
26         if [ $? -eq 0 ]; then
27                 echo "ok $i - small 1 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
28         else
29                 echo "not ok $i - small 1 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
30         fi
31         i=$((i+1))
32
33         geli detach md${no}
34         # Copy first small sector to the second small sector.
35         # This should be detected as corruption.
36         dd if=/dev/md${no} of=${sector} bs=512 count=1 >/dev/null 2>&1
37         dd if=${sector} of=/dev/md${no} bs=512 count=1 seek=1 >/dev/null 2>&1
38         geli attach -p -k $keyfile md${no}
39
40         dd if=/dev/md${no}.eli of=/dev/null bs=${secsize} count=1 >/dev/null 2>&1
41         if [ $? -ne 0 ]; then
42                 echo "ok $i - small 2 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
43         else
44                 echo "not ok $i - small 2 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
45         fi
46         i=$((i+1))
47
48         ms=`diskinfo /dev/md${no} | awk '{print $3 - 512}'`
49         ns=`diskinfo /dev/md${no}.eli | awk '{print $4}'`
50         usecsize=`echo "($ms / $ns) - (($ms / $ns) % 512)" | bc`
51
52         # Fix the corruption
53         dd if=/dev/random of=/dev/md${no}.eli bs=${secsize} count=2 >/dev/null 2>&1
54
55         dd if=/dev/md${no}.eli bs=${secsize} count=2 >/dev/null 2>&1
56         if [ $? -eq 0 ]; then
57                 echo "ok $i - big 1 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
58         else
59                 echo "not ok $i - big 1 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
60         fi
61         i=$((i+1))
62
63         geli detach md${no}
64         # Copy first big sector to the second big sector.
65         # This should be detected as corruption.
66         dd if=/dev/md${no} of=${sector} bs=${usecsize} count=1 >/dev/null 2>&1
67         dd if=${sector} of=/dev/md${no} bs=${usecsize} count=1 seek=1 >/dev/null 2>&1
68         geli attach -p -k $keyfile md${no}
69
70         dd if=/dev/md${no}.eli of=/dev/null bs=${secsize} count=2 >/dev/null 2>&1
71         if [ $? -ne 0 ]; then
72                 echo "ok $i - big 2 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
73         else
74                 echo "not ok $i - big 2 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}"
75         fi
76         i=$((i+1))
77
78         geli detach md${no}
79         mdconfig -d -u $no
80 }
81
82
83 i=1
84 dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1
85
86 for_each_geli_config do_test
87
88 rm -f $keyfile $sector