1*1825cc07SMaxim Levitsky#!/usr/bin/env bash 2*1825cc07SMaxim Levitsky# 3*1825cc07SMaxim Levitsky# Test encrypted write that crosses cluster boundary of two unallocated clusters 4*1825cc07SMaxim Levitsky# Based on 188 5*1825cc07SMaxim Levitsky# 6*1825cc07SMaxim Levitsky# Copyright (C) 2019 Red Hat, Inc. 7*1825cc07SMaxim Levitsky# 8*1825cc07SMaxim Levitsky# This program is free software; you can redistribute it and/or modify 9*1825cc07SMaxim Levitsky# it under the terms of the GNU General Public License as published by 10*1825cc07SMaxim Levitsky# the Free Software Foundation; either version 2 of the License, or 11*1825cc07SMaxim Levitsky# (at your option) any later version. 12*1825cc07SMaxim Levitsky# 13*1825cc07SMaxim Levitsky# This program is distributed in the hope that it will be useful, 14*1825cc07SMaxim Levitsky# but WITHOUT ANY WARRANTY; without even the implied warranty of 15*1825cc07SMaxim Levitsky# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*1825cc07SMaxim Levitsky# GNU General Public License for more details. 17*1825cc07SMaxim Levitsky# 18*1825cc07SMaxim Levitsky# You should have received a copy of the GNU General Public License 19*1825cc07SMaxim Levitsky# along with this program. If not, see <http://www.gnu.org/licenses/>. 20*1825cc07SMaxim Levitsky# 21*1825cc07SMaxim Levitsky 22*1825cc07SMaxim Levitsky# creator 23*1825cc07SMaxim Levitskyowner=mlevitsk@redhat.com 24*1825cc07SMaxim Levitsky 25*1825cc07SMaxim Levitskyseq=`basename $0` 26*1825cc07SMaxim Levitskyecho "QA output created by $seq" 27*1825cc07SMaxim Levitsky 28*1825cc07SMaxim Levitskystatus=1 # failure is the default! 29*1825cc07SMaxim Levitsky 30*1825cc07SMaxim Levitsky_cleanup() 31*1825cc07SMaxim Levitsky{ 32*1825cc07SMaxim Levitsky _cleanup_test_img 33*1825cc07SMaxim Levitsky} 34*1825cc07SMaxim Levitskytrap "_cleanup; exit \$status" 0 1 2 3 15 35*1825cc07SMaxim Levitsky 36*1825cc07SMaxim Levitsky# get standard environment, filters and checks 37*1825cc07SMaxim Levitsky. ./common.rc 38*1825cc07SMaxim Levitsky. ./common.filter 39*1825cc07SMaxim Levitsky 40*1825cc07SMaxim Levitsky_supported_fmt qcow2 41*1825cc07SMaxim Levitsky_supported_proto generic 42*1825cc07SMaxim Levitsky_supported_os Linux 43*1825cc07SMaxim Levitsky 44*1825cc07SMaxim Levitsky 45*1825cc07SMaxim Levitskysize=1M 46*1825cc07SMaxim Levitsky 47*1825cc07SMaxim LevitskySECRET="secret,id=sec0,data=astrochicken" 48*1825cc07SMaxim LevitskyQEMU_IO_OPTIONS=$QEMU_IO_OPTIONS_NO_FMT 49*1825cc07SMaxim Levitsky 50*1825cc07SMaxim Levitsky 51*1825cc07SMaxim Levitsky_run_test() 52*1825cc07SMaxim Levitsky{ 53*1825cc07SMaxim Levitsky echo "== reading the whole image ==" 54*1825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "read -P 0 0 $size" --image-opts "$1" | _filter_qemu_io | _filter_testdir 55*1825cc07SMaxim Levitsky 56*1825cc07SMaxim Levitsky echo 57*1825cc07SMaxim Levitsky echo "== write two 512 byte sectors on a cluster boundary ==" 58*1825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "write -P 0xAA 0xFE00 0x400" --image-opts "$1" | _filter_qemu_io | _filter_testdir 59*1825cc07SMaxim Levitsky 60*1825cc07SMaxim Levitsky echo 61*1825cc07SMaxim Levitsky echo "== verify that the rest of the image is not changed ==" 62*1825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "read -P 0x00 0x00000 0xFE00" --image-opts "$1" | _filter_qemu_io | _filter_testdir 63*1825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "read -P 0xAA 0x0FE00 0x400" --image-opts "$1" | _filter_qemu_io | _filter_testdir 64*1825cc07SMaxim Levitsky $QEMU_IO --object $SECRET -c "read -P 0x00 0x10200 0xEFE00" --image-opts "$1" | _filter_qemu_io | _filter_testdir 65*1825cc07SMaxim Levitsky 66*1825cc07SMaxim Levitsky} 67*1825cc07SMaxim Levitsky 68*1825cc07SMaxim Levitsky 69*1825cc07SMaxim Levitskyecho 70*1825cc07SMaxim Levitskyecho "testing LUKS qcow2 encryption" 71*1825cc07SMaxim Levitskyecho 72*1825cc07SMaxim Levitsky 73*1825cc07SMaxim Levitsky_make_test_img --object $SECRET -o "encrypt.format=luks,encrypt.key-secret=sec0,encrypt.iter-time=10,cluster_size=64K" $size 74*1825cc07SMaxim Levitsky_run_test "driver=$IMGFMT,encrypt.key-secret=sec0,file.filename=$TEST_IMG" 75*1825cc07SMaxim Levitsky_cleanup_test_img 76*1825cc07SMaxim Levitsky 77*1825cc07SMaxim Levitskyecho 78*1825cc07SMaxim Levitskyecho "testing legacy AES qcow2 encryption" 79*1825cc07SMaxim Levitskyecho 80*1825cc07SMaxim Levitsky 81*1825cc07SMaxim Levitsky 82*1825cc07SMaxim Levitsky_make_test_img --object $SECRET -o "encrypt.format=aes,encrypt.key-secret=sec0,cluster_size=64K" $size 83*1825cc07SMaxim Levitsky_run_test "driver=$IMGFMT,encrypt.key-secret=sec0,file.filename=$TEST_IMG" 84*1825cc07SMaxim Levitsky_cleanup_test_img 85*1825cc07SMaxim Levitsky 86*1825cc07SMaxim Levitsky 87*1825cc07SMaxim Levitsky 88*1825cc07SMaxim Levitsky# success, all done 89*1825cc07SMaxim Levitskyecho "*** done" 90*1825cc07SMaxim Levitskyrm -f $seq.full 91*1825cc07SMaxim Levitskystatus=0 92