@@ -241,6 +241,7 @@ corrupt_device() # $1 device, $2 device_size(in bytes), $3 #{corrupted_bytes}
241241# $1 data_device, $2 hash_device, $3 fec_device, $4 data/hash_block_size(in bytes),
242242# $5 data_size(in blocks), $6 device_size(in blocks), $7 hash_offset(in bytes),
243243# $8 fec_offset(in bytes), $9 fec_roots, ${10} corrupted_bytes, [${11} superblock(y/n), ${12} salt]
244+ # NOTE: do not use fail() in this function, use RET code
244245check_fec ()
245246{
246247 INDEX=25
@@ -292,18 +293,32 @@ check_fec()
292293 dd if=/dev/mapper/$DEV_NAME of=$IMG_TMP > /dev/null 2>&1
293294 HASH_REPAIRED=$( sha256sum $IMG_TMP | cut -d' ' -f 1)
294295
296+ # If empty, status not supported
297+ REPAIRED=$( dmsetup status $DEV_NAME | sed -e s/.* verity\ \[ VC\]\ * //)
298+ if [ -n " $REPAIRED " -a " $REPAIRED " != " -" ] ; then
299+ echo -n " [EC events: $REPAIRED ]"
300+ else
301+ REPAIRED=" "
302+ fi
303+
295304 $VERITYSETUP close $DEV_NAME
296305
297306 if [ " $HASH_ORIG " != " $HASH_REPAIRED " ]; then
307+ RET=1
308+ if [ -n " $REPAIRED " ]; then
309+ [ " $REPAIRED " -eq 0 ] || { RET=4; echo " FEC repaired events should be 0." ; }
310+ fi
298311 echo -n " [kernel correction failed]"
299- $VERITYSETUP verify $1 $2 $ROOT_HASH --fec-device=$3 $PARAMS > /dev/null 2>&1 && fail " Userspace verify should fail"
312+ $VERITYSETUP verify $1 $2 $ROOT_HASH --fec-device=$3 $PARAMS > /dev/null 2>&1 && { RET=5 ; echo " Userspace verify should fail" ; }
300313 echo -n " [userspace verify failed]"
301- RET=1
302314 else
315+ RET=0
303316 echo -n " [repaired in kernel]"
304- $VERITYSETUP verify $1 $2 $ROOT_HASH --fec-device=$3 $PARAMS > /dev/null 2>&1 || fail " Userspace verify failed"
317+ if [ -n " $REPAIRED " ]; then
318+ [ " $REPAIRED " -gt 0 ] || { RET=4; echo " FEC repaired events should be greater than 0." ; }
319+ fi
320+ $VERITYSETUP verify $1 $2 $ROOT_HASH --fec-device=$3 $PARAMS > /dev/null 2>&1 || { RET=5; echo " Userspace verify failed" ; }
305321 echo " [userspace verify][OK]"
306- RET=0
307322 fi
308323 rm $1 $2 $3 $IMG_TMP > /dev/null 2>&1
309324 return $RET
@@ -531,10 +546,10 @@ if check_version 1 3; then
531546 echo " Veritysetup [FEC tests]"
532547 for INDEX in {1..4}; do
533548 # in the first iteration check if we can use FEC (it can be compiled-out)
534- (check_fec $IMG $IMG $IMG 4096 30 150 163840 409600 $(( $RANDOM % 23 + 2 )) $(( $INDEX * 4 )) )
549+ (check_fec $IMG $IMG $IMG 4096 30 150 163840 409600 $(( $RANDOM % 23 + 2 )) $(( $INDEX * 4 )) )
535550 RET=$?
536- [ " $RET " -eq " 3 " ] && break
537- [ " $RET " -eq " 0 " ] || fail " FEC repair failed"
551+ [ " $RET " -eq 3 ] && break
552+ [ " $RET " -eq 0 ] || fail " FEC repair failed"
538553
539554 (check_fec $IMG $IMG $IMG 512 500 50000 2457600 4915200 $(( $RANDOM % 23 + 2 )) $(( $INDEX * 4 )) ' n' $SALT ) || fail " FEC repair failed"
540555 (check_fec $IMG $IMG $IMG 512 500 50000 2457600 4915200 $(( $RANDOM % 23 + 2 )) $(( $INDEX * 4 )) ' y' $SALT ) || fail " FEC repair failed"
@@ -546,7 +561,9 @@ if check_version 1 3; then
546561 (check_fec $IMG $IMG_HASH $FEC_DEV 512 2000 2000 0 0 $(( $RANDOM % 23 + 2 )) $(( $INDEX * 4 )) ) || fail " FEC repair failed"
547562 (check_fec $IMG $IMG_HASH $FEC_DEV 1024 2000 2000 0 0 $(( $RANDOM % 23 + 2 )) $(( $INDEX * 4 )) ) || fail " FEC repair failed"
548563 # this test should fail
549- (check_fec $IMG $IMG_HASH $FEC_DEV 4096 30 30 0 0 $(( $RANDOM % 23 + 2 )) $(( $RANDOM % 200 + 200 )) ) && fail " FEC repair must fail"
564+ (check_fec $IMG $IMG_HASH $FEC_DEV 4096 30 30 0 0 $(( $RANDOM % 23 + 2 )) $(( $RANDOM % 200 + 200 )) )
565+ RET=$?
566+ [ " $RET " -eq 1 ] || fail " FEC repair must fail"
550567 echo " [OK]"
551568 done
552569fi
0 commit comments