SKE: When failure is received mark SKE always failed
authorPekka Riikonen <priikone@silcnet.org>
Thu, 26 Feb 2009 06:06:02 +0000 (08:06 +0200)
committerPekka Riikonen <priikone@silcnet.org>
Thu, 26 Feb 2009 06:06:02 +0000 (08:06 +0200)
Mark the SKE failed even if we don't receive error from remote.  Fixes
crash where the callback is called back to application without valid
key material and without error status.

lib/silcske/silcske.c

index 5cb7c91d9c7f908aa8313d2cb6e3383165f079cf..df641f61c8feda7d621c1c1b749f2ac18a79712c 100644 (file)
@@ -1809,10 +1809,10 @@ SILC_FSM_STATE(silc_ske_st_initiator_failure)
 
   if (ske->packet && silc_buffer_len(&ske->packet->buffer) == 4) {
     SILC_GET32_MSB(error, ske->packet->buffer.data);
-    ske->status = error;
     silc_packet_free(ske->packet);
     ske->packet = NULL;
   }
+  ske->status = error;
 
   SILC_LOG_DEBUG(("Error %s (%d) received during key exchange",
                  silc_ske_map_status(ske->status), ske->status));
@@ -2383,10 +2383,10 @@ SILC_FSM_STATE(silc_ske_st_responder_failure)
 
   if (ske->packet && silc_buffer_len(&ske->packet->buffer) == 4) {
     SILC_GET32_MSB(error, ske->packet->buffer.data);
-    ske->status = error;
     silc_packet_free(ske->packet);
     ske->packet = NULL;
   }
+  ske->status = error;
 
   silc_packet_stream_unlink(ske->stream, &silc_ske_stream_cbs, ske);
   silc_schedule_task_del_by_context(ske->schedule, ske);