From b304c006a3c9ba186fb2510859df7f02a0acad25 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 21 Jun 2019 14:51:55 +0200 Subject: [PATCH] scd: Take the card look while running app->with_keygrip. * scd/app.c (app_do_with_keygrip): Lock the card. -- Better safe than sorry. We should also review the card reference counting to see whether we better ref the returned card object already here. Signed-off-by: Werner Koch --- scd/app.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/scd/app.c b/scd/app.c index 34ed99d57..ccba75c89 100644 --- a/scd/app.c +++ b/scd/app.c @@ -1492,6 +1492,7 @@ app_send_card_list (ctrl_t ctrl) card_t app_do_with_keygrip (ctrl_t ctrl, int action, const char *keygrip_str) { + gpg_error_t err; card_t c; app_t a; @@ -1499,9 +1500,17 @@ app_do_with_keygrip (ctrl_t ctrl, int action, const char *keygrip_str) for (c = card_top; c; c = c->next) for (a = c->app; a; a = a->next) - if (a->fnc.with_keygrip - && !a->fnc.with_keygrip (a, ctrl, action, keygrip_str)) - break; + if (a->fnc.with_keygrip) + { + if (!lock_card (c, ctrl)) + { + err = a->fnc.with_keygrip (a, ctrl, action, keygrip_str); + unlock_card (c); + if (!err) + break; + } + } + /* FIXME: Add app switching logic. The above code assumes that the * actions can be performend without switching. This needs to be * checked. For a lookup we also need to reorder the apps so that