11825cc07SMaxim Levitsky#!/usr/bin/env bash 29dd003a9SVladimir Sementsov-Ogievskiy# group: rw quick 31825cc07SMaxim Levitsky# 41825cc07SMaxim Levitsky# Test encrypted write that crosses cluster boundary of two unallocated clusters 51825cc07SMaxim Levitsky# Based on 188 61825cc07SMaxim Levitsky# 71825cc07SMaxim Levitsky# Copyright (C) 2019 Red Hat, Inc. 81825cc07SMaxim Levitsky# 91825cc07SMaxim Levitsky# This program is free software; you can redistribute it and/or modify 101825cc07SMaxim Levitsky# it under the terms of the GNU General Public License as published by 111825cc07SMaxim Levitsky# the Free Software Foundation; either version 2 of the License, or 121825cc07SMaxim Levitsky# (at your option) any later version. 131825cc07SMaxim Levitsky# 141825cc07SMaxim Levitsky# This program is distributed in the hope that it will be useful, 151825cc07SMaxim Levitsky# but WITHOUT ANY WARRANTY; without even the implied warranty of 161825cc07SMaxim Levitsky# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 171825cc07SMaxim Levitsky# GNU General Public License for more details. 181825cc07SMaxim Levitsky# 191825cc07SMaxim Levitsky# You should have received a copy of the GNU General Public License 201825cc07SMaxim Levitsky# along with this program. If not, see <http://www.gnu.org/licenses/>. 211825cc07SMaxim Levitsky# 221825cc07SMaxim Levitsky 231825cc07SMaxim Levitsky# creator 241825cc07SMaxim Levitskyowner=mlevitsk@redhat.com 251825cc07SMaxim Levitsky 261825cc07SMaxim Levitskyseq=`basename $0` 271825cc07SMaxim Levitskyecho "QA output created by $seq" 281825cc07SMaxim Levitsky 291825cc07SMaxim Levitskystatus=1 # failure is the default! 301825cc07SMaxim Levitsky 311825cc07SMaxim Levitsky_cleanup() 321825cc07SMaxim Levitsky{ 331825cc07SMaxim Levitsky _cleanup_test_img 341825cc07SMaxim Levitsky} 351825cc07SMaxim Levitskytrap "_cleanup; exit \$status" 0 1 2 3 15 361825cc07SMaxim Levitsky 37*cff61408SThomas HuthIMGOPTSSYNTAX=true 38*cff61408SThomas Huth 391825cc07SMaxim Levitsky# get standard environment, filters and checks 401825cc07SMaxim Levitsky. ./common.rc 411825cc07SMaxim Levitsky. ./common.filter 421825cc07SMaxim Levitsky 431825cc07SMaxim Levitsky_supported_fmt qcow2 441825cc07SMaxim Levitsky_supported_proto generic 451825cc07SMaxim Levitsky_supported_os Linux 46d2a839edSMax Reitz_require_working_luks 471825cc07SMaxim Levitsky 481825cc07SMaxim Levitsky 491825cc07SMaxim Levitskysize=1M 501825cc07SMaxim Levitsky 511825cc07SMaxim LevitskySECRET="secret,id=sec0,data=astrochicken" 521825cc07SMaxim LevitskyQEMU_IO_OPTIONS=$QEMU_IO_OPTIONS_NO_FMT 531825cc07SMaxim Levitsky 541825cc07SMaxim Levitsky 551825cc07SMaxim Levitsky_run_test() 561825cc07SMaxim Levitsky{ 571825cc07SMaxim Levitsky echo "== reading the whole image ==" 581825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "read -P 0 0 $size" --image-opts "$1" | _filter_qemu_io | _filter_testdir 591825cc07SMaxim Levitsky 601825cc07SMaxim Levitsky echo 611825cc07SMaxim Levitsky echo "== write two 512 byte sectors on a cluster boundary ==" 621825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "write -P 0xAA 0xFE00 0x400" --image-opts "$1" | _filter_qemu_io | _filter_testdir 631825cc07SMaxim Levitsky 641825cc07SMaxim Levitsky echo 651825cc07SMaxim Levitsky echo "== verify that the rest of the image is not changed ==" 661825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "read -P 0x00 0x00000 0xFE00" --image-opts "$1" | _filter_qemu_io | _filter_testdir 671825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "read -P 0xAA 0x0FE00 0x400" --image-opts "$1" | _filter_qemu_io | _filter_testdir 681825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "read -P 0x00 0x10200 0xEFE00" --image-opts "$1" | _filter_qemu_io | _filter_testdir 691825cc07SMaxim Levitsky 701825cc07SMaxim Levitsky} 711825cc07SMaxim Levitsky 721825cc07SMaxim Levitsky 731825cc07SMaxim Levitskyecho 741825cc07SMaxim Levitskyecho "testing LUKS qcow2 encryption" 751825cc07SMaxim Levitskyecho 761825cc07SMaxim Levitsky 771825cc07SMaxim Levitsky_make_test_img --object $SECRET -o "encrypt.format=luks,encrypt.key-secret=sec0,encrypt.iter-time=10,cluster_size=64K" $size 78*cff61408SThomas Huth_run_test "$TEST_IMG,encrypt.key-secret=sec0" 791825cc07SMaxim Levitsky_cleanup_test_img 801825cc07SMaxim Levitsky 811825cc07SMaxim Levitskyecho 821825cc07SMaxim Levitskyecho "testing legacy AES qcow2 encryption" 831825cc07SMaxim Levitskyecho 841825cc07SMaxim Levitsky 851825cc07SMaxim Levitsky 861825cc07SMaxim Levitsky_make_test_img --object $SECRET -o "encrypt.format=aes,encrypt.key-secret=sec0,cluster_size=64K" $size 87*cff61408SThomas Huth_run_test "$TEST_IMG,encrypt.key-secret=sec0" 881825cc07SMaxim Levitsky_cleanup_test_img 891825cc07SMaxim Levitsky 901825cc07SMaxim Levitsky 911825cc07SMaxim Levitsky 921825cc07SMaxim Levitsky# success, all done 931825cc07SMaxim Levitskyecho "*** done" 941825cc07SMaxim Levitskyrm -f $seq.full 951825cc07SMaxim Levitskystatus=0 96