From 4fbd01a3d44a0bcca888c49a77ec7cfd10e113d7 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Wed, 16 Sep 2020 02:28:58 +0200 Subject: [PATCH] Limit identity packets to 8KiB Healthy identity packages shouldn't be that big and we don't want to allow systems around us to send us ever humongous packages that will just leave us without any memory. Thanks Matthias Gerstner for reporting this. --- core/backends/lan/lanlinkprovider.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/backends/lan/lanlinkprovider.cpp b/core/backends/lan/lanlinkprovider.cpp index 0e14922ed..aeabc7f30 100644 --- a/core/backends/lan/lanlinkprovider.cpp +++ b/core/backends/lan/lanlinkprovider.cpp @@ -399,6 +399,14 @@ void LanLinkProvider::newConnection() void LanLinkProvider::dataReceived() { QSslSocket* socket = qobject_cast(sender()); + //the size here is arbitrary and is now at 8192 bytes. It needs to be considerably long as it includes the capabilities but there needs to be a limit + //Tested between my systems and I get around 2000 per identity package. + if (socket->bytesAvailable() > 8192) { + qCWarning(KDECONNECT_CORE) << "LanLinkProvider/newConnection: Suspiciously long identity package received. Closing connection." << socket->peerAddress() << socket->bytesAvailable(); + socket->disconnectFromHost(); + return; + } + #if QT_VERSION < QT_VERSION_CHECK(5,7,0) if (!socket->canReadLine()) return;