mirror of
git://git.gnupg.org/gnupg.git
synced 2024-12-22 10:19:57 +01:00
scd: Fix race conditions for release_application.
* scd/command.c (do_reset, cmd_restart): Reset app_ctx before calling release_application. -- Backport of master commit: 0c1fd4e9884ed7c1edd1819762b9e8a77f606ed3 Thanks to Ben Warren for the report. Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
f916d5756f
commit
3b3386a3fd
@ -283,6 +283,7 @@ static void
|
||||
do_reset (ctrl_t ctrl, int send_reset)
|
||||
{
|
||||
int slot = ctrl->reader_slot;
|
||||
struct app_ctx_s *app = ctrl->app_ctx;
|
||||
|
||||
if (!(slot == -1 || (slot >= 0 && slot < DIM(slot_table))))
|
||||
BUG ();
|
||||
@ -290,10 +291,10 @@ do_reset (ctrl_t ctrl, int send_reset)
|
||||
/* If there is an active application, release it. Tell all other
|
||||
sessions using the same application to release the
|
||||
application. */
|
||||
if (ctrl->app_ctx)
|
||||
if (app)
|
||||
{
|
||||
release_application (ctrl->app_ctx);
|
||||
ctrl->app_ctx = NULL;
|
||||
release_application (app);
|
||||
if (send_reset)
|
||||
{
|
||||
struct server_local_s *sl;
|
||||
@ -1744,13 +1745,14 @@ static gpg_error_t
|
||||
cmd_restart (assuan_context_t ctx, char *line)
|
||||
{
|
||||
ctrl_t ctrl = assuan_get_pointer (ctx);
|
||||
struct app_ctx_s *app = ctrl->app_ctx;
|
||||
|
||||
(void)line;
|
||||
|
||||
if (ctrl->app_ctx)
|
||||
if (app)
|
||||
{
|
||||
release_application (ctrl->app_ctx);
|
||||
ctrl->app_ctx = NULL;
|
||||
release_application (app);
|
||||
}
|
||||
if (locked_session && ctrl->server_local == locked_session)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user