Add linux kernel interval tree
This commit is contained in:
@@ -826,6 +826,11 @@ static inline const char *parse_mpls(struct packet *pkt, const char *data, uint1
|
||||
{
|
||||
next_proto = MPLS_NEXT_PROTO_MPLS;
|
||||
}
|
||||
if (unlikely(hdr_len > len))
|
||||
{
|
||||
PACKET_LOG_DATA_INSUFFICIENCY(LAYER_TYPE_MPLS);
|
||||
return data;
|
||||
}
|
||||
SET_LAYER(pkt, layer, LAYER_TYPE_MPLS, hdr_len, data, len);
|
||||
|
||||
switch (next_proto)
|
||||
@@ -863,6 +868,11 @@ static inline const char *parse_ipv4(struct packet *pkt, const char *data, uint1
|
||||
struct ip *hdr = (struct ip *)data;
|
||||
uint8_t next_proto = ipv4_hdr_get_proto(hdr);
|
||||
uint16_t hdr_len = ipv4_hdr_get_hdr_len(hdr);
|
||||
if (unlikely(hdr_len > len))
|
||||
{
|
||||
PACKET_LOG_DATA_INSUFFICIENCY(LAYER_TYPE_IPV4);
|
||||
return data;
|
||||
}
|
||||
SET_LAYER(pkt, layer, LAYER_TYPE_IPV4, hdr_len, data, len);
|
||||
|
||||
// ip fragmented
|
||||
@@ -913,7 +923,7 @@ static inline const char *parse_gre(struct packet *pkt, const char *data, uint16
|
||||
#define GRE_PRO_PPP (0x880B)
|
||||
|
||||
uint16_t hdr_len = get_gre_hdr_len(data, len);
|
||||
if (unlikely(hdr_len == 0))
|
||||
if (unlikely(hdr_len == 0 || hdr_len > len))
|
||||
{
|
||||
PACKET_LOG_DATA_INSUFFICIENCY(LAYER_TYPE_GRE);
|
||||
return data;
|
||||
@@ -989,6 +999,11 @@ static inline const char *parse_tcp(struct packet *pkt, const char *data, uint16
|
||||
return data;
|
||||
}
|
||||
uint16_t hdr_len = tcp_hdr_get_hdr_len((struct tcphdr *)data);
|
||||
if (unlikely(hdr_len > len))
|
||||
{
|
||||
PACKET_LOG_DATA_INSUFFICIENCY(LAYER_TYPE_TCP);
|
||||
return data;
|
||||
}
|
||||
SET_LAYER(pkt, layer, LAYER_TYPE_TCP, hdr_len, data, len);
|
||||
|
||||
return layer->pld_ptr;
|
||||
@@ -1024,7 +1039,7 @@ static inline const char *parse_vxlan(struct packet *pkt, const char *data, uint
|
||||
static inline const char *parse_gtpv1_u(struct packet *pkt, const char *data, uint16_t len)
|
||||
{
|
||||
uint16_t hdr_len = get_gtp_hdr_len(data, len);
|
||||
if (unlikely(hdr_len == 0))
|
||||
if (unlikely(hdr_len == 0 || hdr_len > len))
|
||||
{
|
||||
PACKET_LOG_DATA_INSUFFICIENCY(LAYER_TYPE_GTPV1_U);
|
||||
return data;
|
||||
|
||||
Reference in New Issue
Block a user