pkgsrc/chat/licq-core/patches/patch-ab
tonnerre 2b32a72a59 Fix multiple connection handling Denial of Service vulnerability in licq
(CVE-2008-1996). Before this, the application would crash if too many TCP
connections are opened.
2008-05-11 04:12:34 +00:00

47 lines
1.6 KiB
Text

$NetBSD: patch-ab,v 1.3 2008/05/11 04:12:34 tonnerre Exp $
--- src/icqd-chat.cpp.orig 2007-09-09 14:05:24.000000000 +0200
+++ src/icqd-chat.cpp
@@ -23,6 +23,7 @@
// Localization
#include "gettext.h"
+#define MAX_CONNECTS 256
#define DEBUG_THREADS(x)
@@ -2383,16 +2384,24 @@ void *ChatManager_tep(void *arg)
// Connection on the server port ---------------------------------------
else if (nCurrentSocket == chatman->chatServer.Descriptor())
{
- CChatUser *u = new CChatUser;
- u->m_pClient = new CChatClient;
-
- chatman->chatServer.RecvConnection(u->sock);
- chatman->sockman.AddSocket(&u->sock);
- chatman->sockman.DropSocket(&u->sock);
-
- u->state = CHAT_STATE_HANDSHAKE;
- chatman->chatUsers.push_back(u);
- gLog.Info(tr("%sChat: Received connection.\n"), L_TCPxSTR);
+ if (chatman->sockman.Num() >= MAX_CONNECTS)
+ {
+ // Too many sockets, drop this one
+ gLog.Warn(tr("%sToo many connected clients, rejecting new connection.\n"), L_WARNxSTR);
+ }
+ else
+ {
+ CChatUser *u = new CChatUser;
+ u->m_pClient = new CChatClient;
+
+ chatman->chatServer.RecvConnection(u->sock);
+ chatman->sockman.AddSocket(&u->sock);
+ chatman->sockman.DropSocket(&u->sock);
+
+ u->state = CHAT_STATE_HANDSHAKE;
+ chatman->chatUsers.push_back(u);
+ gLog.Info(tr("%sChat: Received connection.\n"), L_TCPxSTR);
+ }
}
// Message from connected socket----------------------------------------