* [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak
@ 2018-10-19 10:50 Li Qiang
2018-10-19 10:50 ` [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier Li Qiang
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Li Qiang @ 2018-10-19 10:50 UTC (permalink / raw)
To: kraxel; +Cc: qemu-devel, liq3ea, Li Qiang
Li Qiang (2):
hw: ccid-card-emulated: introduce clean_event_notifier
hw: ccid-card-emulated: cleanup resource when realize in error path
hw/usb/ccid-card-emulated.c | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 5+ messages in thread* [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier 2018-10-19 10:50 [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Li Qiang @ 2018-10-19 10:50 ` Li Qiang 2018-10-19 10:50 ` [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path Li Qiang 2018-10-29 9:46 ` [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Gerd Hoffmann 2 siblings, 0 replies; 5+ messages in thread From: Li Qiang @ 2018-10-19 10:50 UTC (permalink / raw) To: kraxel; +Cc: qemu-devel, liq3ea, Li Qiang Call it in device unrealize function. Signed-off-by: Li Qiang <liq3ea@gmail.com> --- hw/usb/ccid-card-emulated.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c index 5c8b3c9..b356edb 100644 --- a/hw/usb/ccid-card-emulated.c +++ b/hw/usb/ccid-card-emulated.c @@ -409,6 +409,12 @@ static int init_event_notifier(EmulatedState *card, Error **errp) return 0; } +static void clean_event_notifier(EmulatedState *card) +{ + event_notifier_set_handler(&card->notifier, NULL); + event_notifier_cleanup(&card->notifier); +} + #define CERTIFICATES_DEFAULT_DB "/etc/pki/nssdb" #define CERTIFICATES_ARGS_TEMPLATE\ "db=\"%s\" use_hw=no soft=(,Virtual Reader,CAC,,%s,%s,%s)" @@ -556,6 +562,7 @@ static void emulated_unrealize(CCIDCardState *base, Error **errp) qemu_cond_signal(&card->handle_apdu_cond); qemu_thread_join(&card->apdu_thread_id); + clean_event_notifier(card); /* threads exited, can destroy all condvars/mutexes */ qemu_cond_destroy(&card->handle_apdu_cond); qemu_mutex_destroy(&card->handle_apdu_mutex); -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path 2018-10-19 10:50 [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Li Qiang 2018-10-19 10:50 ` [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier Li Qiang @ 2018-10-19 10:50 ` Li Qiang 2018-10-19 11:56 ` Philippe Mathieu-Daudé 2018-10-29 9:46 ` [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Gerd Hoffmann 2 siblings, 1 reply; 5+ messages in thread From: Li Qiang @ 2018-10-19 10:50 UTC (permalink / raw) To: kraxel; +Cc: qemu-devel, liq3ea, Li Qiang Signed-off-by: Li Qiang <liq3ea@gmail.com> --- hw/usb/ccid-card-emulated.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c index b356edb..25976ed 100644 --- a/hw/usb/ccid-card-emulated.c +++ b/hw/usb/ccid-card-emulated.c @@ -499,7 +499,7 @@ static void emulated_realize(CCIDCardState *base, Error **errp) card->reader = NULL; card->quit_apdu_thread = 0; if (init_event_notifier(card, errp) < 0) { - return; + goto out1; } card->backend = 0; @@ -513,7 +513,7 @@ static void emulated_realize(CCIDCardState *base, Error **errp) for (ptable = backend_enum_table; ptable->name != NULL; ++ptable) { error_append_hint(errp, "%s\n", ptable->name); } - return; + goto out2; } /* TODO: a passthru backened that works on local machine. third card type?*/ @@ -523,31 +523,39 @@ static void emulated_realize(CCIDCardState *base, Error **errp) } else { error_setg(errp, "%s: you must provide all three certs for" " certificates backend", TYPE_EMULATED_CCID); - return; + goto out2; } } else { if (card->backend != BACKEND_NSS_EMULATED) { error_setg(errp, "%s: bad backend specified. The options are:%s" " (default), %s.", TYPE_EMULATED_CCID, BACKEND_NSS_EMULATED_NAME, BACKEND_CERTIFICATES_NAME); - return; + goto out2; } if (card->cert1 != NULL || card->cert2 != NULL || card->cert3 != NULL) { error_setg(errp, "%s: unexpected cert parameters to nss emulated " "backend", TYPE_EMULATED_CCID); - return; + goto out2; } /* default to mirroring the local hardware readers */ ret = wrap_vcard_emul_init(NULL); } if (ret != VCARD_EMUL_OK) { error_setg(errp, "%s: failed to initialize vcard", TYPE_EMULATED_CCID); - return; + goto out2; } qemu_thread_create(&card->event_thread_id, "ccid/event", event_thread, card, QEMU_THREAD_JOINABLE); qemu_thread_create(&card->apdu_thread_id, "ccid/apdu", handle_apdu_thread, card, QEMU_THREAD_JOINABLE); + +out2: + clean_event_notifier(card); +out1: + qemu_cond_destroy(&card->handle_apdu_cond); + qemu_mutex_destroy(&card->handle_apdu_mutex); + qemu_mutex_destroy(&card->vreader_mutex); + qemu_mutex_destroy(&card->event_list_mutex); } static void emulated_unrealize(CCIDCardState *base, Error **errp) -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path 2018-10-19 10:50 ` [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path Li Qiang @ 2018-10-19 11:56 ` Philippe Mathieu-Daudé 0 siblings, 0 replies; 5+ messages in thread From: Philippe Mathieu-Daudé @ 2018-10-19 11:56 UTC (permalink / raw) To: Li Qiang, kraxel; +Cc: liq3ea, qemu-devel On 19/10/2018 12:50, Li Qiang wrote: > Signed-off-by: Li Qiang <liq3ea@gmail.com> > --- > hw/usb/ccid-card-emulated.c | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-) > > diff --git a/hw/usb/ccid-card-emulated.c b/hw/usb/ccid-card-emulated.c > index b356edb..25976ed 100644 > --- a/hw/usb/ccid-card-emulated.c > +++ b/hw/usb/ccid-card-emulated.c > @@ -499,7 +499,7 @@ static void emulated_realize(CCIDCardState *base, Error **errp) > card->reader = NULL; > card->quit_apdu_thread = 0; > if (init_event_notifier(card, errp) < 0) { > - return; > + goto out1; > } > > card->backend = 0; > @@ -513,7 +513,7 @@ static void emulated_realize(CCIDCardState *base, Error **errp) > for (ptable = backend_enum_table; ptable->name != NULL; ++ptable) { > error_append_hint(errp, "%s\n", ptable->name); > } > - return; > + goto out2; > } > > /* TODO: a passthru backened that works on local machine. third card type?*/ > @@ -523,31 +523,39 @@ static void emulated_realize(CCIDCardState *base, Error **errp) > } else { > error_setg(errp, "%s: you must provide all three certs for" > " certificates backend", TYPE_EMULATED_CCID); > - return; > + goto out2; > } > } else { > if (card->backend != BACKEND_NSS_EMULATED) { > error_setg(errp, "%s: bad backend specified. The options are:%s" > " (default), %s.", TYPE_EMULATED_CCID, > BACKEND_NSS_EMULATED_NAME, BACKEND_CERTIFICATES_NAME); > - return; > + goto out2; > } > if (card->cert1 != NULL || card->cert2 != NULL || card->cert3 != NULL) { > error_setg(errp, "%s: unexpected cert parameters to nss emulated " > "backend", TYPE_EMULATED_CCID); > - return; > + goto out2; > } > /* default to mirroring the local hardware readers */ > ret = wrap_vcard_emul_init(NULL); > } > if (ret != VCARD_EMUL_OK) { > error_setg(errp, "%s: failed to initialize vcard", TYPE_EMULATED_CCID); > - return; > + goto out2; > } > qemu_thread_create(&card->event_thread_id, "ccid/event", event_thread, > card, QEMU_THREAD_JOINABLE); > qemu_thread_create(&card->apdu_thread_id, "ccid/apdu", handle_apdu_thread, > card, QEMU_THREAD_JOINABLE); > + > +out2: You might call this 'cleanup' ... > + clean_event_notifier(card); > +out1: ... and this one 'out'. > + qemu_cond_destroy(&card->handle_apdu_cond); > + qemu_mutex_destroy(&card->handle_apdu_mutex); > + qemu_mutex_destroy(&card->vreader_mutex); > + qemu_mutex_destroy(&card->event_list_mutex); > } > > static void emulated_unrealize(CCIDCardState *base, Error **errp) > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak 2018-10-19 10:50 [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Li Qiang 2018-10-19 10:50 ` [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier Li Qiang 2018-10-19 10:50 ` [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path Li Qiang @ 2018-10-29 9:46 ` Gerd Hoffmann 2 siblings, 0 replies; 5+ messages in thread From: Gerd Hoffmann @ 2018-10-29 9:46 UTC (permalink / raw) To: Li Qiang; +Cc: qemu-devel, liq3ea On Fri, Oct 19, 2018 at 03:50:34AM -0700, Li Qiang wrote: > > Li Qiang (2): > hw: ccid-card-emulated: introduce clean_event_notifier > hw: ccid-card-emulated: cleanup resource when realize in error path Added to usb queue. thanks, Gerd ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-10-29 9:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2018-10-19 10:50 [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Li Qiang 2018-10-19 10:50 ` [Qemu-devel] [PATCH 1/2] hw: ccid-card-emulated: introduce clean_event_notifier Li Qiang 2018-10-19 10:50 ` [Qemu-devel] [PATCH 2/2] hw: ccid-card-emulated: cleanup resource when realize in error path Li Qiang 2018-10-19 11:56 ` Philippe Mathieu-Daudé 2018-10-29 9:46 ` [Qemu-devel] [PATCH 0/2] hw: ccid-card-emulated: fix some resources leak Gerd Hoffmann
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).