message: Limit maximum number of IKEv2 fragments
authorTobias Brunner <tobias@strongswan.org>
Tue, 16 Sep 2014 13:51:21 +0000 (15:51 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 10 Oct 2014 07:32:42 +0000 (09:32 +0200)
The maximum for IKEv1 is already 255 due to the 8-bit fragment number.

With an overhead of 17 bytes (x64) per fragment and a default maximum
of 10000 bytes per packet the maximum memory required is 14 kB
for a fragmented message.

src/libcharon/encoding/message.c

index 5e5647d..cb6c97f 100644 (file)
@@ -931,6 +931,11 @@ struct private_message_t {
 };
 
 /**
+ * Maximum number of fragments we will handle
+ */
+#define MAX_FRAGMENTS 255
+
+/**
  * A single fragment within a fragmented message
  */
 typedef struct {
@@ -2779,7 +2784,12 @@ METHOD(message_t, add_fragment_v2, status_t,
        }
        encrypted_fragment = (encrypted_fragment_payload_t*)payload;
        total = encrypted_fragment->get_total_fragments(encrypted_fragment);
-
+       if (total > MAX_FRAGMENTS)
+       {
+               DBG1(DBG_IKE, "maximum fragment count exceeded");
+               reset_defrag(this);
+               return FAILED;
+       }
        if (!this->fragments || total > this->frag->last)
        {
                reset_defrag(this);