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

172 (7409B)


      1#!/usr/bin/env bash
      2# group: auto
      3#
      4# Test floppy configuration
      5#
      6# Copyright (C) 2016 Red Hat, Inc.
      7#
      8# This program is free software; you can redistribute it and/or modify
      9# it under the terms of the GNU General Public License as published by
     10# the Free Software Foundation; either version 2 of the License, or
     11# (at your option) any later version.
     12#
     13# This program is distributed in the hope that it will be useful,
     14# but WITHOUT ANY WARRANTY; without even the implied warranty of
     15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16# GNU General Public License for more details.
     17#
     18# You should have received a copy of the GNU General Public License
     19# along with this program.  If not, see <http://www.gnu.org/licenses/>.
     20#
     21
     22# creator
     23owner=kwolf@redhat.com
     24
     25seq=`basename $0`
     26echo "QA output created by $seq"
     27
     28status=1	# failure is the default!
     29
     30_cleanup()
     31{
     32    _cleanup_test_img
     33    _rm_test_img "$TEST_IMG.2"
     34    _rm_test_img "$TEST_IMG.3"
     35}
     36trap "_cleanup; exit \$status" 0 1 2 3 15
     37
     38# get standard environment, filters and checks
     39. ./common.rc
     40. ./common.filter
     41
     42_supported_fmt qcow2
     43_supported_proto file
     44_supported_os Linux
     45
     46if [ "$QEMU_DEFAULT_MACHINE" != "pc" ]; then
     47    _notrun "Requires a PC machine"
     48fi
     49
     50do_run_qemu()
     51{
     52    (
     53        if ! test -t 0; then
     54            while read cmd; do
     55                echo $cmd
     56            done
     57        fi
     58        echo quit
     59    ) | $QEMU -accel qtest -nographic -monitor stdio -serial none "$@"
     60    echo
     61}
     62
     63check_floppy_qtree()
     64{
     65    echo
     66    echo Testing: "$@" | _filter_testdir
     67
     68    # QEMU_OPTIONS contains -nodefaults, we don't want that here because the
     69    # defaults are part of what should be checked here.
     70    #
     71    # Apply the sed filter to stdout only, but keep the stderr output and
     72    # filter the qemu program name in it.
     73    printf "info qtree\ninfo block\n" |
     74    (QEMU_OPTIONS="" do_run_qemu "$@" |
     75	_filter_testdir |_filter_generated_node_ids | _filter_hmp |
     76        sed -ne '/^          dev: isa-fdc/,/^          dev:/{x;p};/^[a-z][^ ]* (NODE_NAME):* /,/^(qemu)$/{p}') 2>&1 |
     77    _filter_win32 | _filter_qemu | _filter_qom_path
     78}
     79
     80check_cache_mode()
     81{
     82    echo "info block none0" |
     83    QEMU_OPTIONS="" do_run_qemu -drive if=none,file="$TEST_IMG" "$@" |
     84    _filter_win32 | _filter_qemu | grep "Cache mode"
     85}
     86
     87
     88size=720k
     89
     90_make_test_img $size
     91
     92TEST_IMG="$TEST_IMG.2" _make_test_img $size
     93TEST_IMG="$TEST_IMG.3" _make_test_img $size
     94
     95# Default drive semantics:
     96#
     97# By default you get a single empty floppy drive. You can override it with
     98# -drive and using the same index, but if you use -drive to add a floppy to a
     99# different index, you get both of them. However, as soon as you use any
    100# '-device floppy', even to a different slot, the default drive is disabled.
    101
    102echo
    103echo
    104echo === Default ===
    105
    106check_floppy_qtree
    107
    108echo
    109echo
    110echo === Using -fda/-fdb options ===
    111
    112check_floppy_qtree -fda "$TEST_IMG"
    113check_floppy_qtree -fdb "$TEST_IMG"
    114check_floppy_qtree -fda "$TEST_IMG" -fdb "$TEST_IMG.2"
    115check_floppy_qtree -fdb ""
    116
    117
    118echo
    119echo
    120echo === Using -drive options ===
    121
    122check_floppy_qtree -drive if=floppy,file="$TEST_IMG"
    123check_floppy_qtree -drive if=floppy,file="$TEST_IMG",index=1
    124check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=floppy,file="$TEST_IMG.2",index=1
    125
    126echo
    127echo
    128echo === Using -drive if=none and -device ===
    129
    130check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0
    131check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,unit=1
    132check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
    133                   -device floppy,drive=none0 -device floppy,drive=none1,unit=1
    134
    135echo
    136echo
    137echo === Mixing -fdX and -global ===
    138
    139# Conflicting, -fdX wins
    140check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -global floppy.drive=none0
    141
    142echo
    143echo
    144echo === Mixing -fdX and -device ===
    145
    146# Working
    147check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0
    148check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=1
    149
    150check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0
    151check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0
    152
    153# Conflicting
    154check_floppy_qtree -fda "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0
    155check_floppy_qtree -fdb "$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=1
    156
    157echo
    158echo
    159echo === Mixing -drive and -device ===
    160
    161# Working
    162check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0
    163check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=1
    164
    165# Conflicting
    166check_floppy_qtree -drive if=floppy,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" -device floppy,drive=none0,unit=0
    167
    168echo
    169echo
    170echo === Mixing -global and -device ===
    171
    172# Working
    173check_floppy_qtree -drive if=none,file="$TEST_IMG" \
    174                   -global floppy.drive=none0 -device floppy,unit=0
    175
    176# Conflicting
    177check_floppy_qtree -drive if=none,file="$TEST_IMG" -drive if=none,file="$TEST_IMG.2" \
    178                   -global floppy.drive=none0 -device floppy,drive=none1,unit=0
    179
    180echo
    181echo
    182echo === Attempt to use drive twice ===
    183
    184# if=none
    185check_floppy_qtree -drive if=none -device floppy,drive=none0 -device floppy -device floppy,drive=none0
    186check_floppy_qtree -drive if=none -global floppy.drive=none0 -device floppy -device floppy
    187# if=floppy
    188check_floppy_qtree -fda "" -device floppy,drive=floppy0
    189check_floppy_qtree -fda "" -global floppy.drive=floppy0
    190# default if=floppy (not found, because it's created later)
    191check_floppy_qtree -device floppy,drive=floppy0
    192
    193echo
    194echo
    195echo === Too many floppy drives ===
    196
    197# Working
    198check_floppy_qtree -drive if=floppy,file="$TEST_IMG" \
    199                   -drive if=none,file="$TEST_IMG.2" \
    200                   -drive if=none,file="$TEST_IMG.3" \
    201                   -device floppy,drive=none0 \
    202                   -device floppy,drive=none1
    203
    204echo
    205echo
    206echo === Creating an empty drive with anonymous BB ===
    207
    208check_floppy_qtree -device floppy
    209check_floppy_qtree -device floppy,drive-type=120
    210check_floppy_qtree -device floppy,drive-type=144
    211check_floppy_qtree -device floppy,drive-type=288
    212
    213echo
    214echo
    215echo === Try passing different drive size with image ===
    216
    217check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,drive-type=120
    218check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,drive-type=288
    219
    220echo
    221echo
    222echo === Try passing different block sizes ===
    223
    224# Explicitly setting the default is okay
    225check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,logical_block_size=512
    226check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,physical_block_size=512
    227
    228# Changing it is not
    229check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,logical_block_size=4096
    230check_floppy_qtree -drive if=none,file="$TEST_IMG" -device floppy,drive=none0,physical_block_size=1024
    231
    232echo
    233echo
    234echo === Writethrough caching ===
    235
    236check_cache_mode -device floppy,drive=none0
    237check_cache_mode -device floppy,drive=none0,write-cache=on
    238check_cache_mode -device floppy,drive=none0,write-cache=off
    239
    240# success, all done
    241echo "*** done"
    242rm -f $seq.full
    243status=0