8abcb1d6b2
Include security fixes and other recent "stable" fixes OBS-URL: https://build.opensuse.org/request/show/664459 OBS-URL: https://build.opensuse.org/package/show/Virtualization/qemu?expand=0&rev=445
55 lines
2.0 KiB
Diff
55 lines
2.0 KiB
Diff
From: Gerd Hoffmann <kraxel@redhat.com>
|
|
Date: Wed, 9 Jan 2019 11:07:15 -0700
|
|
Subject: hw/usb: fix mistaken de-initialization of CCID state
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
From: Daniel P. Berrangé <berrange@redhat.com>
|
|
|
|
In previous commit:
|
|
|
|
commit 7dea29e4af17fc1d27478de9f8ea38144deac54a
|
|
Author: Li Qiang <liq3ea@gmail.com>
|
|
Date: Fri Oct 19 03:50:36 2018 -0700
|
|
|
|
hw: ccid-card-emulated: cleanup resource when realize in error path
|
|
|
|
The emulated_realize method was changed so that it jumps to a cleanup
|
|
label to de-initialize state upon error. This change failed to ensure
|
|
the success path exited the method before this point though. So the
|
|
mutexes are always destroyed even in normal operation. The result is
|
|
as crashtastic as expected:
|
|
|
|
$ qemu-system-x86_64 -usb -device usb-ccid,id=ccid0 -device ccid-card-emulated,backend=nss-emulated,id=smartcard0,bus=ccid0.0
|
|
qemu-system-x86_64: util/qemu-thread-posix.c:64: qemu_mutex_lock_impl: Assertion `mutex->initialized' failed.
|
|
Aborted (core dumped)
|
|
|
|
Fixes: 7dea29e4af1
|
|
Reported-by: Michael Tokarev <mjt@tls.msk.ru>
|
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
|
Reviewed-by: Michael Tokarev <mjt@tls.msk.ru>
|
|
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
|
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
|
|
Message-id: 20181221134115.27973-1-berrange@redhat.com
|
|
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
|
|
(cherry picked from commit 3fd2092fd11b9e4220a08eca0663cc59178a6c3f)
|
|
Signed-off-by: Bruce Rogers <brogers@suse.com>
|
|
---
|
|
hw/usb/ccid-card-emulated.c | 2 ++
|
|
1 file changed, 2 insertions(+)
|
|
|
|
diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c
|
|
index 25976ed84f..e0457d305b 100644
|
|
--- a/hw/usb/ccid-card-emulated.c
|
|
+++ b/hw/usb/ccid-card-emulated.c
|
|
@@ -549,6 +549,8 @@ static void emulated_realize(CCIDCardState *base, Error **errp)
|
|
qemu_thread_create(&card->apdu_thread_id, "ccid/apdu", handle_apdu_thread,
|
|
card, QEMU_THREAD_JOINABLE);
|
|
|
|
+ return;
|
|
+
|
|
out2:
|
|
clean_event_notifier(card);
|
|
out1:
|