- Client: Fix signature verification double free

- Packet engine: prevent divide by 0
- SKE: Make sure failure received from remote results in error status

From upstream repo via Brad
This commit is contained in:
sthen 2010-06-02 00:10:18 +00:00
parent a839823e70
commit 8ff9d48002
4 changed files with 46 additions and 2 deletions

View File

@ -1,9 +1,9 @@
# $OpenBSD: Makefile,v 1.56 2010/04/26 20:09:18 steven Exp $
# $OpenBSD: Makefile,v 1.57 2010/06/02 00:10:18 sthen Exp $
COMMENT= Secure Internet Live Conferencing (SILC) client
DISTNAME= silc-client-1.1.8
PKGNAME= ${DISTNAME}p3
PKGNAME= ${DISTNAME}p4
CATEGORIES= net
HOMEPAGE= http://www.silcnet.org/

View File

@ -0,0 +1,17 @@
$OpenBSD: patch-apps_irssi_src_silc_core_client_ops_c,v 1.1 2010/06/02 00:10:18 sthen Exp $
--- apps/irssi/src/silc/core/client_ops.c.orig Sat Dec 13 15:30:25 2008
+++ apps/irssi/src/silc/core/client_ops.c Sat May 29 18:58:33 2010
@@ -262,10 +262,11 @@ int verify_message_signature(SilcClientEntry sender,
sizeof(sender->fingerprint));
if (strcmp(fingerprint, fingerprint2)) {
/* since the public key differs from the senders public key, the
- verification _failed_ */
+ verification won't be done */
silc_pkcs_public_key_free(pk);
silc_free(fingerprint);
- ret = SILC_MSG_SIGNED_UNKNOWN;
+ silc_free(fingerprint2);
+ return SILC_MSG_SIGNED_UNKNOWN;
}
silc_free(fingerprint2);
}

View File

@ -0,0 +1,15 @@
$OpenBSD: patch-lib_silccore_silcpacket_c,v 1.1 2010/06/02 00:10:18 sthen Exp $
--- lib/silccore/silcpacket.c.orig Sat May 29 18:59:19 2010
+++ lib/silccore/silcpacket.c Sat May 29 19:00:31 2010
@@ -2231,8 +2231,9 @@ static void silc_packet_read_process(SilcPacketStream
/* Padding sanity checks */
if (cipher && silc_cipher_get_mode(cipher) != SILC_CIPHER_MODE_CTR &&
- ((normal && paddedlen % block_len != 0) ||
- (!normal && silc_packet_special_len(header) % block_len != 0))) {
+ ((normal && block_len && paddedlen % block_len != 0) ||
+ (!normal && block_len &&
+ silc_packet_special_len(header) % block_len != 0))) {
SILC_LOG_DEBUG(("Packet length %d not multiple by cipher block length",
paddedlen));
silc_mutex_unlock(stream->lock);

View File

@ -0,0 +1,12 @@
$OpenBSD: patch-lib_silcske_silcske_c,v 1.1 2010/06/02 00:10:18 sthen Exp $
--- lib/silcske/silcske.c.orig Sat May 29 19:00:50 2010
+++ lib/silcske/silcske.c Sat May 29 19:01:32 2010
@@ -2387,6 +2387,8 @@ SILC_FSM_STATE(silc_ske_st_responder_failure)
ske->packet = NULL;
}
ske->status = error;
+ if (ske->status == SILC_SKE_STATUS_OK)
+ ske->status = SILC_SKE_STATUS_ERROR;
silc_packet_stream_unlink(ske->stream, &silc_ske_stream_cbs, ske);
silc_schedule_task_del_by_context(ske->schedule, ske);