/**
* Decode/Validate IPv4 Options.
*/
-static int DecodeIPV4Options(Packet *p, uint8_t *pkt, uint16_t len, IPV4Options *opts)
+static void DecodeIPV4Options(Packet *p, uint8_t *pkt, uint16_t len, IPV4Options *opts)
{
uint16_t plen = len;
/* Option length is too big for packet */
if (unlikely(*(pkt+1) > plen)) {
ENGINE_SET_INVALID_EVENT(p, IPV4_OPT_INVALID_LEN);
- return -1;
+ return;
}
IPV4Opt opt = {*pkt, *(pkt+1), plen > 2 ? (pkt + 2) : NULL };
* Also check for invalid lengths 0 and 1. */
if (unlikely(opt.len > plen || opt.len < 2)) {
ENGINE_SET_INVALID_EVENT(p, IPV4_OPT_INVALID_LEN);
- return -1;
+ return;
}
/* we are parsing the most commonly used opts to prevent
* us from having to walk the opts list for these all the
/* Warn - we can keep going */
break;
} else if (IPV4OptValidateTimestamp(p, &opt)) {
- return -1;
+ return;
}
opts->o_ts = opt;
p->ip4vars.opts_set |= IPV4_OPT_FLAG_TS;
/* Warn - we can keep going */
break;
} else if (IPV4OptValidateRoute(p, &opt) != 0) {
- return -1;
+ return;
}
opts->o_rr = opt;
p->ip4vars.opts_set |= IPV4_OPT_FLAG_RR;
/* Warn - we can keep going */
break;
} else if (IPV4OptValidateGeneric(p, &opt)) {
- return -1;
+ return;
}
opts->o_qs = opt;
p->ip4vars.opts_set |= IPV4_OPT_FLAG_QS;
/* Warn - we can keep going */
break;
} else if (IPV4OptValidateGeneric(p, &opt)) {
- return -1;
+ return;
}
opts->o_sec = opt;
p->ip4vars.opts_set |= IPV4_OPT_FLAG_SEC;
/* Warn - we can keep going */
break;
} else if (IPV4OptValidateRoute(p, &opt) != 0) {
- return -1;
+ return;
}
opts->o_lsrr = opt;
p->ip4vars.opts_set |= IPV4_OPT_FLAG_LSRR;
/* Warn - we can keep going */
break;
} else if (IPV4OptValidateCIPSO(p, &opt) != 0) {
- return -1;
+ return;
}
opts->o_cipso = opt;
p->ip4vars.opts_set |= IPV4_OPT_FLAG_CIPSO;
/* Warn - we can keep going */
break;
} else if (IPV4OptValidateGeneric(p, &opt)) {
- return -1;
+ return;
}
opts->o_sid = opt;
p->ip4vars.opts_set |= IPV4_OPT_FLAG_SID;
/* Warn - we can keep going */
break;
} else if (IPV4OptValidateRoute(p, &opt) != 0) {
- return -1;
+ return;
}
opts->o_ssrr = opt;
p->ip4vars.opts_set |= IPV4_OPT_FLAG_SSRR;
/* Warn - we can keep going */
break;
} else if (IPV4OptValidateGeneric(p, &opt)) {
- return -1;
+ return;
}
opts->o_rtralt = opt;
p->ip4vars.opts_set |= IPV4_OPT_FLAG_RTRALT;
}
}
- return 0;
}
static int DecodeIPV4Packet(Packet *p, uint8_t *pkt, uint16_t len)
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
SCFree(p);
PASS;
FAIL_IF(unlikely(p == NULL));
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF (rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
SCFree(p);
PASS;
}
FAIL_IF(unlikely(p == NULL));
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF (rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
SCFree(p);
PASS;
}
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
FAIL_IF(opts.o_rr.type != IPV4_OPT_RR);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_rr.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_rr.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_rr.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
FAIL_IF(opts.o_qs.type != IPV4_OPT_QS);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_qs.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
FAIL_IF(opts.o_ts.type != IPV4_OPT_TS);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_ts.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_ts.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_ts.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
FAIL_IF(opts.o_sec.type != IPV4_OPT_SEC);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_sec.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
FAIL_IF(opts.o_lsrr.type != IPV4_OPT_LSRR);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_lsrr.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_lsrr.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_lsrr.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
FAIL_IF(opts.o_cipso.type != IPV4_OPT_CIPSO);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
FAIL_IF(opts.o_sid.type != IPV4_OPT_SID);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_sid.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
FAIL_IF(opts.o_ssrr.type != IPV4_OPT_SSRR);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_ssrr.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_ssrr.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_ssrr.type != 0);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc != 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF(p->flags & PKT_IS_INVALID);
FAIL_IF(opts.o_rtralt.type != IPV4_OPT_RTRALT);
SCFree(p);
PASS;
IPV4Options opts;
memset(&opts, 0x00, sizeof(opts));
- int rc = DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
- FAIL_IF(rc == 0);
+ DecodeIPV4Options(p, raw_opts, sizeof(raw_opts), &opts);
+ FAIL_IF((p->flags & PKT_IS_INVALID) == 0);
FAIL_IF(opts.o_rtralt.type != 0);
SCFree(p);
PASS;