]> git.proxmox.com Git - mirror_ovs.git/commitdiff
ipf: Do not preallocate more than needed.
authorDarrell Ball <dlu998@gmail.com>
Wed, 20 Feb 2019 16:17:15 +0000 (08:17 -0800)
committerBen Pfaff <blp@ovn.org>
Fri, 22 Feb 2019 22:08:05 +0000 (14:08 -0800)
ipf_reassemble_v4_frags() and ipf_reassemble_v6_frags() are
preallocating more than needed for the reassembled packet.

Signed-off-by: Darrell Ball <dlu998@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
lib/ipf.c

index 125a8151dccc606ca77ec1914b039a3085624099..a4608afb6c742bff2a8422fdf4d77ad928f75da4 100644 (file)
--- a/lib/ipf.c
+++ b/lib/ipf.c
@@ -420,15 +420,16 @@ ipf_reassemble_v4_frags(struct ipf_list *ipf_list)
         return NULL;
     }
 
-    dp_packet_prealloc_tailroom(pkt, len + rest_len);
+    dp_packet_prealloc_tailroom(pkt, rest_len);
 
     for (int i = 1; i <= ipf_list->last_inuse_idx; i++) {
         size_t add_len = frag_list[i].end_data_byte -
                          frag_list[i].start_data_byte + 1;
-        len += add_len;
         const char *l4 = dp_packet_l4(frag_list[i].pkt);
         dp_packet_put(pkt, l4, add_len);
     }
+
+    len += rest_len;
     l3 = dp_packet_l3(pkt);
     ovs_be16 new_ip_frag_off = l3->ip_frag_off & ~htons(IP_MORE_FRAGMENTS);
     l3->ip_csum = recalc_csum16(l3->ip_csum, l3->ip_frag_off,
@@ -463,16 +464,16 @@ ipf_reassemble_v6_frags(struct ipf_list *ipf_list)
         return NULL;
     }
 
-    dp_packet_prealloc_tailroom(pkt, pl + rest_len);
+    dp_packet_prealloc_tailroom(pkt, rest_len);
 
     for (int i = 1; i <= ipf_list->last_inuse_idx; i++) {
         size_t add_len = frag_list[i].end_data_byte -
                           frag_list[i].start_data_byte + 1;
-        pl += add_len;
         const char *l4 = dp_packet_l4(frag_list[i].pkt);
         dp_packet_put(pkt, l4, add_len);
     }
 
+    pl += rest_len;
     l3 = dp_packet_l3(pkt);
 
     uint8_t nw_proto = l3->ip6_nxt;