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

217 (2317B)


      1#!/usr/bin/env bash
      2# group: rw auto quick
      3#
      4# I/O errors when working with internal qcow2 snapshots, and repairing
      5# the result
      6#
      7# Copyright (C) 2018 Red Hat, Inc.
      8#
      9# This program is free software; you can redistribute it and/or modify
     10# it under the terms of the GNU General Public License as published by
     11# the Free Software Foundation; either version 2 of the License, or
     12# (at your option) any later version.
     13#
     14# This program is distributed in the hope that it will be useful,
     15# but WITHOUT ANY WARRANTY; without even the implied warranty of
     16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     17# GNU General Public License for more details.
     18#
     19# You should have received a copy of the GNU General Public License
     20# along with this program.  If not, see <http://www.gnu.org/licenses/>.
     21
     22seq=$(basename $0)
     23echo "QA output created by $seq"
     24
     25status=1	# failure is the default!
     26
     27_cleanup()
     28{
     29    _cleanup_test_img
     30    rm -f "$TEST_DIR/blkdebug.conf"
     31}
     32trap "_cleanup; exit \$status" 0 1 2 3 15
     33
     34# get standard environment, filters and checks
     35. ./common.rc
     36. ./common.filter
     37
     38# This test is specific to qcow2
     39_supported_fmt qcow2
     40_supported_proto file fuse
     41
     42# This test needs clusters with at least a refcount of 2 so that
     43# OFLAG_COPIED is not set.  refcount_bits=1 is therefore unsupported.
     44# (As are external data files.)
     45_unsupported_imgopts 'refcount_bits=1[^0-9]' data_file
     46
     47echo
     48echo '=== Simulating an I/O error during snapshot deletion ==='
     49echo
     50
     51_make_test_img 64M
     52$QEMU_IO -c 'write 0 64k' "$TEST_IMG" | _filter_qemu_io
     53
     54# Create the snapshot
     55$QEMU_IMG snapshot -c foo "$TEST_IMG"
     56
     57# Verify the snapshot is there
     58echo
     59_img_info | grep 'Snapshot list'
     60echo '(Snapshot filtered)'
     61echo
     62
     63# Try to delete the snapshot (with an error happening when freeing the
     64# then leaked clusters)
     65cat > "$TEST_DIR/blkdebug.conf" <<EOF
     66[inject-error]
     67event = "cluster_free"
     68errno = "5"
     69EOF
     70$QEMU_IMG snapshot -d foo "blkdebug:$TEST_DIR/blkdebug.conf:$TEST_IMG"
     71
     72# Verify the snapshot is gone
     73echo
     74_img_info | grep 'Snapshot list'
     75
     76# Should only show leaks
     77echo '--- Checking test image ---'
     78_check_test_img
     79
     80echo
     81
     82# As there are only leaks, this should be able to fully repair the
     83# image
     84echo '--- Repairing test image ---'
     85_check_test_img -r leaks
     86
     87
     88# success, all done
     89echo '*** done'
     90rm -f $seq.full
     91status=0