integrity_copy_test.sh revision 312828
1#!/bin/sh
2# $FreeBSD: stable/10/tests/sys/geom/class/eli/integrity_copy_test.sh 312828 2017-01-26 20:10:31Z asomers $
3
4. $(dirname $0)/conf.sh
5
6base=`basename $0`
7keyfile=`mktemp $base.XXXXXX` || exit 1
8sector=`mktemp $base.XXXXXX` || exit 1
9
10echo "1..2400"
11
12do_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
83i=1
84dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1
85
86for_each_geli_config do_test
87
88rm -f $keyfile $sector
89