It was subtracting the extension header count from caplen after reducing it to packet_len, resulting in truncated records.
caplen = rlen - dag_record_size - 4;
dp+=4;
}
caplen = rlen - dag_record_size - 4;
dp+=4;
}
+ /* Skip over extension headers */
+ caplen -= (8 * num_ext_hdr);
+
if (header->type == TYPE_ATM) {
caplen = packet_len = ATM_CELL_SIZE;
}
if (header->type == TYPE_ATM) {
caplen = packet_len = ATM_CELL_SIZE;
}
packet_len = ntohs(header->wlen);
packet_len -= (pd->dag_fcs_bits >> 3);
caplen = rlen - dag_record_size - 2;
packet_len = ntohs(header->wlen);
packet_len -= (pd->dag_fcs_bits >> 3);
caplen = rlen - dag_record_size - 2;
+ /* Skip over extension headers */
+ caplen -= (8 * num_ext_hdr);
if (caplen > packet_len) {
caplen = packet_len;
}
if (caplen > packet_len) {
caplen = packet_len;
}
packet_len = ntohs(header->wlen);
packet_len -= (pd->dag_fcs_bits >> 3);
caplen = rlen - dag_record_size;
packet_len = ntohs(header->wlen);
packet_len -= (pd->dag_fcs_bits >> 3);
caplen = rlen - dag_record_size;
+ /* Skip over extension headers */
+ caplen -= (8 * num_ext_hdr);
if (caplen > packet_len) {
caplen = packet_len;
}
if (caplen > packet_len) {
caplen = packet_len;
}
packet_len = ntohs(header->wlen);
packet_len -= (pd->dag_fcs_bits >> 3);
caplen = rlen - dag_record_size - 4;
packet_len = ntohs(header->wlen);
packet_len -= (pd->dag_fcs_bits >> 3);
caplen = rlen - dag_record_size - 4;
+ /* Skip over extension headers */
+ caplen -= (8 * num_ext_hdr);
if (caplen > packet_len) {
caplen = packet_len;
}
if (caplen > packet_len) {
caplen = packet_len;
}
case TYPE_IPV6:
packet_len = ntohs(header->wlen);
caplen = rlen - dag_record_size;
case TYPE_IPV6:
packet_len = ntohs(header->wlen);
caplen = rlen - dag_record_size;
+ /* Skip over extension headers */
+ caplen -= (8 * num_ext_hdr);
if (caplen > packet_len) {
caplen = packet_len;
}
if (caplen > packet_len) {
caplen = packet_len;
}
continue;
} /* switch type */
continue;
} /* switch type */
- /* Skip over extension headers */
- caplen -= (8 * num_ext_hdr);
-
} /* ERF encapsulation */
if (caplen > p->snapshot)
} /* ERF encapsulation */
if (caplen > p->snapshot)