diff options
author | Werner Koch <[email protected]> | 2019-06-21 12:51:55 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2019-06-21 12:51:55 +0000 |
commit | b304c006a3c9ba186fb2510859df7f02a0acad25 (patch) | |
tree | 7607bde1987af608e2482e9a7647330d17a00f12 | |
parent | scd: Take the lock earlier in the function dispatchers. (diff) | |
download | gnupg-b304c006a3c9ba186fb2510859df7f02a0acad25.tar.gz gnupg-b304c006a3c9ba186fb2510859df7f02a0acad25.zip |
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 <[email protected]>
-rw-r--r-- | scd/app.c | 15 |
1 files changed, 12 insertions, 3 deletions
@@ -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 |