cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

039 (4889B)


      1#!/usr/bin/env bash
      2# group: rw auto quick
      3#
      4# Test qcow2 lazy refcounts
      5#
      6# Copyright (C) 2012 Red Hat, Inc.
      7# Copyright IBM, Corp. 2010
      8#
      9# Based on test 038.
     10#
     11# This program is free software; you can redistribute it and/or modify
     12# it under the terms of the GNU General Public License as published by
     13# the Free Software Foundation; either version 2 of the License, or
     14# (at your option) any later version.
     15#
     16# This program is distributed in the hope that it will be useful,
     17# but WITHOUT ANY WARRANTY; without even the implied warranty of
     18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     19# GNU General Public License for more details.
     20#
     21# You should have received a copy of the GNU General Public License
     22# along with this program.  If not, see <http://www.gnu.org/licenses/>.
     23#
     24
     25# creator
     26owner=stefanha@linux.vnet.ibm.com
     27
     28seq=`basename $0`
     29echo "QA output created by $seq"
     30
     31status=1	# failure is the default!
     32
     33_cleanup()
     34{
     35	_cleanup_test_img
     36}
     37trap "_cleanup; exit \$status" 0 1 2 3 15
     38
     39# get standard environment, filters and checks
     40. ./common.rc
     41. ./common.filter
     42
     43_supported_fmt qcow2
     44_supported_proto file fuse
     45_supported_os Linux
     46_default_cache_mode writethrough
     47_supported_cache_modes writethrough
     48# Some of these test cases expect no external data file so that all
     49# clusters are part of the qcow2 image and refcounted
     50_unsupported_imgopts data_file
     51
     52size=128M
     53
     54echo
     55echo "== Checking that image is clean on shutdown =="
     56
     57_make_test_img -o "compat=1.1,lazy_refcounts=on" $size
     58
     59$QEMU_IO -c "write -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
     60
     61# The dirty bit must not be set
     62$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
     63_check_test_img
     64
     65echo
     66echo "== Creating a dirty image file =="
     67
     68_make_test_img -o "compat=1.1,lazy_refcounts=on" $size
     69
     70_NO_VALGRIND \
     71$QEMU_IO -c "write -P 0x5a 0 512" \
     72         -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
     73    | _filter_qemu_io
     74
     75# The dirty bit must be set
     76$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
     77_check_test_img
     78
     79echo
     80echo "== Read-only access must still work =="
     81
     82$QEMU_IO -r -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
     83
     84# The dirty bit must be set
     85$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
     86
     87echo
     88echo "== Repairing the image file must succeed =="
     89
     90_check_test_img -r all
     91
     92# The dirty bit must not be set
     93$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
     94
     95echo
     96echo "== Data should still be accessible after repair =="
     97
     98$QEMU_IO -c "read -P 0x5a 0 512" "$TEST_IMG" | _filter_qemu_io
     99
    100echo
    101echo "== Opening a dirty image read/write should repair it =="
    102
    103_make_test_img -o "compat=1.1,lazy_refcounts=on" $size
    104
    105_NO_VALGRIND \
    106$QEMU_IO -c "write -P 0x5a 0 512" \
    107         -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
    108    | _filter_qemu_io
    109
    110# The dirty bit must be set
    111$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
    112
    113$QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
    114
    115# The dirty bit must not be set
    116$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
    117
    118echo
    119echo "== Creating an image file with lazy_refcounts=off =="
    120
    121_make_test_img -o "compat=1.1,lazy_refcounts=off" $size
    122
    123_NO_VALGRIND \
    124$QEMU_IO -c "write -P 0x5a 0 512" \
    125         -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
    126    | _filter_qemu_io
    127
    128# The dirty bit must not be set since lazy_refcounts=off
    129$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
    130_check_test_img
    131
    132echo
    133echo "== Committing to a backing file with lazy_refcounts=on =="
    134
    135TEST_IMG="$TEST_IMG".base _make_test_img -o "compat=1.1,lazy_refcounts=on" $size
    136
    137_make_test_img -o "compat=1.1,lazy_refcounts=on,backing_file=$TEST_IMG.base" \
    138    -F $IMGFMT $size
    139
    140$QEMU_IO -c "write 0 512" "$TEST_IMG" | _filter_qemu_io
    141$QEMU_IMG commit "$TEST_IMG"
    142
    143# The dirty bit must not be set
    144$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
    145$PYTHON qcow2.py "$TEST_IMG".base dump-header | grep incompatible_features
    146
    147_check_test_img
    148TEST_IMG="$TEST_IMG".base _check_test_img
    149
    150echo
    151echo "== Changing lazy_refcounts setting at runtime =="
    152
    153_make_test_img -o "compat=1.1,lazy_refcounts=off" $size
    154
    155_NO_VALGRIND \
    156$QEMU_IO -c "reopen -o lazy-refcounts=on" \
    157         -c "write -P 0x5a 0 512" \
    158         -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
    159    | _filter_qemu_io
    160
    161# The dirty bit must be set
    162$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
    163_check_test_img
    164
    165_make_test_img -o "compat=1.1,lazy_refcounts=on" $size
    166
    167_NO_VALGRIND \
    168$QEMU_IO -c "reopen -o lazy-refcounts=off" \
    169         -c "write -P 0x5a 0 512" \
    170         -c "sigraise $(kill -l KILL)" "$TEST_IMG" 2>&1 \
    171    | _filter_qemu_io
    172
    173# The dirty bit must not be set
    174$PYTHON qcow2.py "$TEST_IMG" dump-header | grep incompatible_features
    175_check_test_img
    176
    177
    178# success, all done
    179echo "*** done"
    180rm -f $seq.full
    181status=0
    182