Add linux kernel interval tree

This commit is contained in:
luwenpeng
2024-03-27 17:11:38 +08:00
parent eb281ab789
commit 814a0d739f
25 changed files with 2200 additions and 1665 deletions

View File

@@ -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;