summaryrefslogtreecommitdiff
path: root/datapath-windows/ovsext/PacketParser.h
diff options
context:
space:
mode:
authorShashank Ram <rams@vmware.com>2017-06-15 15:15:47 -0700
committerGurucharan Shetty <guru@ovn.org>2017-06-22 12:32:41 -0700
commit9d71ade0cf5bb6a43f387f5a4765a79f82b0f09d (patch)
tree037962946983acb70abd5472de3b618988269392 /datapath-windows/ovsext/PacketParser.h
parent6c6204b67886ff9b051417376ab69d64191c35f4 (diff)
downloadopenvswitch-9d71ade0cf5bb6a43f387f5a4765a79f82b0f09d.tar.gz
datapath-windows: Add validations for IP_HEADER_LEN
Adds validations in OvsGetIp() to make sure the IHL is within valid bounds. If IHL is invalid, then the packet is dropped by the callers of this function. Signed-off-by: Shashank Ram <rams@vmware.com> Acked-by: Sairam Venugopal <vsairam@vmware.com> Acked-by: Nithin Raju <nithin@vmware.com> Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Diffstat (limited to 'datapath-windows/ovsext/PacketParser.h')
-rw-r--r--datapath-windows/ovsext/PacketParser.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/datapath-windows/ovsext/PacketParser.h b/datapath-windows/ovsext/PacketParser.h
index f1d7f283d..0d5c0a6cb 100644
--- a/datapath-windows/ovsext/PacketParser.h
+++ b/datapath-windows/ovsext/PacketParser.h
@@ -17,6 +17,8 @@
#ifndef __PACKET_PARSER_H_
#define __PACKET_PARSER_H_ 1
+#define MIN_IPV4_HLEN 20
+
#include "precomp.h"
#include "NetProto.h"
@@ -107,7 +109,12 @@ OvsGetIp(const NET_BUFFER_LIST *packet,
const IPHdr *ip = OvsGetPacketBytes(packet, sizeof *ip, ofs, storage);
if (ip) {
int ipLen = ip->ihl * 4;
- if (ipLen >= sizeof *ip && OvsPacketLenNBL(packet) >= ofs + ipLen) {
+ if (ipLen < MIN_IPV4_HLEN ||
+ ipLen > MAX_IPV4_HLEN ||
+ OvsPacketLenNBL(packet) < ofs + ipLen) {
+ /* IP header is invalid, flag it */
+ return NULL;
+ } else {
return ip;
}
}