{
/* Yes, it's an ICMP-related vuln in IP options. */
- uint8_t length, pointer;
int cnt = 0;
{
++cnt;
- if (opt.code == ip::IPOptionCodes::RR)
+ switch(opt.code)
{
- length = opt.len;
+ case ip::IPOptionCodes::EOL:
+ --cnt;
+ break;
+
+ case ip::IPOptionCodes::RR:
+ {
+ const uint8_t length = opt.len;
if (length < 3)
continue;
- pointer = opt.data[0];
+ uint8_t pointer = opt.data[0];
/* If the pointer goes past the end of the data, then the data
is full. That's okay. */
bytes, alert. */
if (((length + 1) - pointer) % 4)
codec_events::decoder_event(codec, DECODE_ICMP_DOS_ATTEMPT);
+
+ break;
}
- else if (opt.code == ip::IPOptionCodes::TS)
+ case ip::IPOptionCodes::TS:
{
- length = opt.get_len();
+ const uint8_t length = opt.get_len();
if (length < 2)
continue;
- pointer = opt.data[0];
+ uint8_t pointer = opt.data[0];
/* If the pointer goes past the end of the data, then the data
is full. That's okay. */
if ((opt.data[1] & 0x01) && /* address flag */
(((length + 1) - pointer) % 8))
codec_events::decoder_event(codec, DECODE_ICMP_DOS_ATTEMPT);
+
+ break;
+ }
+ default:
+ break;
}
}
uint16_t prev_prot_id = FINISHED_DECODE;
uint8_t mapped_prot = CodecManager::grinder;
- // initialize all Packet information
- memset(p, 0, PKT_ZERO_LEN);
- p->pkth = pkthdr;
- p->pkt = pkt;
- p->ptrs.reset();
- layer::set_packet_pointer(p);
-
-
RawData raw;
raw.data = pkt;
raw.len = pkthdr->caplen;
if (p->packet_flags & PKT_REBUILT_STREAM)
codec_data.codec_flags |= CODEC_STREAM_REBUILT;
+
+ // initialize all Packet information
+ memset(p, 0, PKT_ZERO_LEN);
+ p->pkth = pkthdr;
+ p->pkt = pkt;
+ p->ptrs.reset();
+ layer::set_packet_pointer(p);
+
+
MODULE_PROFILE_START(decodePerfStats);
s_stats[total_processed]++;