1#!/bin/bash 2# 3# Test error code paths for invalid QED images 4# 5# The aim of this test is to exercise the error paths in qed_open() to ensure 6# there are no crashes with invalid input files. 7# 8# Copyright (C) 2015 Red Hat, Inc. 9# 10# This program is free software; you can redistribute it and/or modify 11# it under the terms of the GNU General Public License as published by 12# the Free Software Foundation; either version 2 of the License, or 13# (at your option) any later version. 14# 15# This program is distributed in the hope that it will be useful, 16# but WITHOUT ANY WARRANTY; without even the implied warranty of 17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18# GNU General Public License for more details. 19# 20# You should have received a copy of the GNU General Public License 21# along with this program. If not, see <http://www.gnu.org/licenses/>. 22# 23 24# creator 25owner=stefanha@redhat.com 26 27seq=`basename $0` 28echo "QA output created by $seq" 29 30here=`pwd` 31tmp=/tmp/$$ 32status=1 # failure is the default! 33 34_cleanup() 35{ 36 _cleanup_test_img 37} 38trap "_cleanup; exit \$status" 0 1 2 3 15 39 40# get standard environment, filters and checks 41. ./common.rc 42. ./common.filter 43 44_supported_fmt qed 45_supported_proto generic 46_supported_os Linux 47 48 49size=128M 50 51echo 52echo "== truncated header cluster ==" 53_make_test_img $size 54truncate -s 512 "$TEST_IMG" 55$QEMU_IO -f "$IMGFMT" -c "read 0 $size" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir 56 57echo 58echo "== invalid header magic ==" 59_make_test_img $size 60poke_file "$TEST_IMG" "0" "QEDX" 61$QEMU_IO -f "$IMGFMT" -c "read 0 $size" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir 62 63echo 64echo "== invalid cluster size ==" 65_make_test_img $size 66poke_file "$TEST_IMG" "4" "\xff\xff\xff\xff" 67$QEMU_IO -f "$IMGFMT" -c "read 0 $size" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir 68 69echo 70echo "== invalid table size ==" 71_make_test_img $size 72poke_file "$TEST_IMG" "8" "\xff\xff\xff\xff" 73$QEMU_IO -f "$IMGFMT" -c "read 0 $size" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir 74 75echo 76echo "== invalid header size ==" 77_make_test_img $size 78poke_file "$TEST_IMG" "12" "\xff\xff\xff\xff" 79$QEMU_IO -f "$IMGFMT" -c "read 0 $size" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir 80 81echo 82echo "== invalid L1 table offset ==" 83_make_test_img $size 84poke_file "$TEST_IMG" "40" "\xff\xff\xff\xff\xff\xff\xff\xff" 85$QEMU_IO -f "$IMGFMT" -c "read 0 $size" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir 86 87echo 88echo "== invalid image size ==" 89_make_test_img $size 90poke_file "$TEST_IMG" "48" "\xff\xff\xff\xff\xff\xff\xff\xff" 91$QEMU_IO -f "$IMGFMT" -c "read 0 $size" "$TEST_IMG" 2>&1 | _filter_qemu_io | _filter_testdir 92 93# success, all done 94echo "*** done" 95rm -f $seq.full 96status=0 97