From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57197) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XHExT-00085C-KE for qemu-devel@nongnu.org; Tue, 12 Aug 2014 12:30:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XHExI-0002PG-E7 for qemu-devel@nongnu.org; Tue, 12 Aug 2014 12:29:59 -0400 Received: from mx1.redhat.com ([209.132.183.28]:29320) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XHExI-0002Ox-7P for qemu-devel@nongnu.org; Tue, 12 Aug 2014 12:29:48 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s7CGTjAN011488 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 12 Aug 2014 12:29:45 -0400 From: Kevin Wolf Date: Tue, 12 Aug 2014 18:29:41 +0200 Message-Id: <1407860981-7965-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PATCH] ide: Fix segfault when flushing a device that doesn't exist List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, stefanha@redhat.com Signed-off-by: Kevin Wolf --- hw/ide/core.c | 4 +++- tests/ide-test.c | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/hw/ide/core.c b/hw/ide/core.c index db191a6..180ded8 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -838,7 +838,9 @@ static void ide_flush_cb(void *opaque, int ret) } } - bdrv_acct_done(s->bs, &s->acct); + if (s->bs) { + bdrv_acct_done(s->bs, &s->acct); + } s->status = READY_STAT | SEEK_STAT; ide_async_cmd_done(s); ide_set_irq(s->bus); diff --git a/tests/ide-test.c b/tests/ide-test.c index 4a0d97f..a6d7292 100644 --- a/tests/ide-test.c +++ b/tests/ide-test.c @@ -489,6 +489,19 @@ static void test_flush(void) ide_test_quit(); } +static void test_flush_nodev(void) +{ + ide_test_start(""); + + /* FLUSH CACHE command on device 0*/ + outb(IDE_BASE + reg_device, 0); + outb(IDE_BASE + reg_command, CMD_FLUSH_CACHE); + + /* Just testing that qemu doesn't crash... */ + + ide_test_quit(); +} + int main(int argc, char **argv) { const char *arch = qtest_get_arch(); @@ -521,6 +534,7 @@ int main(int argc, char **argv) qtest_add_func("/ide/bmdma/teardown", test_bmdma_teardown); qtest_add_func("/ide/flush", test_flush); + qtest_add_func("/ide/flush_nodev", test_flush_nodev); ret = g_test_run(); -- 1.8.3.1