ip_frag: use key length for key comparison
authorKonstantin Ananyev <konstantin.ananyev@intel.com>
Mon, 5 Nov 2018 12:18:58 +0000 (12:18 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 6 Nov 2018 00:58:11 +0000 (01:58 +0100)
commitb8d5dfd4a5f006794d85f93fc97134460ffbdfdf
tree4bf3d71aab79beb57980754066cb0b85fcbc2407
parent7f0983ee331c9f08dabdb5b7f555ddf399003dcf
ip_frag: use key length for key comparison

Right now reassembly code relies on src_dst[] being all zeroes to
determine is it  free/occupied entry in the fragments table.
This is suboptimal and error prone - user can crash DPDK ip_reassembly
app by something like the following scapy script:
x=Ether(src=...,dst=...)/IP(dst='0.0.0.0',src='0.0.0.0',id=0)/('X'*1000)
frags=fragment(x, fragsize=500)
sendp(frags, iface=...)
To overcome that issue and reduce overhead of
'key invalidate'  and 'key is empty' operations -
add key_len into keys comparision procedure.

Fixes: 4f1a8f633862 ("ip_frag: add IPv6 reassembly")
Cc: stable@dpdk.org
Reported-by: Ryan E Hall <ryan.e.hall@intel.com>
Reported-by: Alexander V Gutkin <alexander.v.gutkin@intel.com>
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
lib/librte_ip_frag/ip_frag_common.h
lib/librte_ip_frag/rte_ip_frag.h