decode: make PacketDrop use action as parameter

A Packet may be dropped due to several different reasons. This change
adds action as a parameter, so we can update the packet action when we
drop it, instead of setting it to drop.

Related to
Bug #5458
pull/7767/head
Juliana Fajardini 3 years ago committed by Victor Julien
parent 01bf0ad43d
commit 1774ff18a6

@ -922,12 +922,22 @@ static inline void PacketSetAction(Packet *p, const uint8_t a)
#define PACKET_TEST_ACTION(p, a) (p)->action &(a) #define PACKET_TEST_ACTION(p, a) (p)->action &(a)
static inline void PacketDrop(Packet *p, enum PacketDropReason r) #define PACKET_UPDATE_ACTION(p, a) (p)->action |= (a)
static inline void PacketUpdateAction(Packet *p, const uint8_t a)
{
if (likely(p->root == NULL)) {
PACKET_UPDATE_ACTION(p, a);
} else {
PACKET_UPDATE_ACTION(p->root, a);
}
}
static inline void PacketDrop(Packet *p, const uint8_t action, enum PacketDropReason r)
{ {
if (p->drop_reason == PKT_DROP_REASON_NOT_SET) if (p->drop_reason == PKT_DROP_REASON_NOT_SET)
p->drop_reason = (uint8_t)r; p->drop_reason = (uint8_t)r;
PACKET_SET_ACTION(p, ACTION_DROP); PACKET_UPDATE_ACTION(p, action);
} }
static inline void PacketPass(Packet *p) static inline void PacketPass(Packet *p)
@ -944,16 +954,6 @@ static inline uint8_t PacketTestAction(const Packet *p, const uint8_t a)
} }
} }
#define PACKET_UPDATE_ACTION(p, a) (p)->action |= (a)
static inline void PacketUpdateAction(Packet *p, const uint8_t a)
{
if (likely(p->root == NULL)) {
PACKET_UPDATE_ACTION(p, a);
} else {
PACKET_UPDATE_ACTION(p->root, a);
}
}
#define TUNNEL_INCR_PKT_RTV_NOLOCK(p) do { \ #define TUNNEL_INCR_PKT_RTV_NOLOCK(p) do { \
((p)->root ? (p)->root->tunnel_rtv_cnt++ : (p)->tunnel_rtv_cnt++); \ ((p)->root ? (p)->root->tunnel_rtv_cnt++ : (p)->tunnel_rtv_cnt++); \
} while (0) } while (0)

@ -184,7 +184,7 @@ static void PacketApplySignatureActions(Packet *p, const Signature *s, const uin
s->action, alert_flags); s->action, alert_flags);
if (s->action & ACTION_DROP) { if (s->action & ACTION_DROP) {
PacketDrop(p, PKT_DROP_REASON_RULES); PacketDrop(p, s->action, PKT_DROP_REASON_RULES);
if (p->alerts.drop.action == 0) { if (p->alerts.drop.action == 0) {
p->alerts.drop.num = s->num; p->alerts.drop.num = s->num;

@ -300,7 +300,7 @@ static inline void RateFilterSetAction(Packet *p, PacketAlert *pa, uint8_t new_a
pa->flags |= PACKET_ALERT_RATE_FILTER_MODIFIED; pa->flags |= PACKET_ALERT_RATE_FILTER_MODIFIED;
break; break;
case TH_ACTION_DROP: case TH_ACTION_DROP:
PacketDrop(p, PKT_DROP_REASON_RULES_THRESHOLD); PacketDrop(p, new_action, PKT_DROP_REASON_RULES_THRESHOLD);
pa->flags |= PACKET_ALERT_RATE_FILTER_MODIFIED; pa->flags |= PACKET_ALERT_RATE_FILTER_MODIFIED;
break; break;
case TH_ACTION_REJECT: case TH_ACTION_REJECT:

@ -1684,7 +1684,7 @@ static void DetectFlow(ThreadVars *tv,
/* if flow is set to drop, we enforce that here */ /* if flow is set to drop, we enforce that here */
if (p->flow->flags & FLOW_ACTION_DROP) { if (p->flow->flags & FLOW_ACTION_DROP) {
PacketDrop(p, PKT_DROP_REASON_FLOW_DROP); PacketDrop(p, ACTION_DROP, PKT_DROP_REASON_FLOW_DROP);
SCReturn; SCReturn;
} }

@ -4963,7 +4963,7 @@ int StreamTcpPacket (ThreadVars *tv, Packet *p, StreamTcpThread *stt,
FlowSetNoPacketInspectionFlag(p->flow); FlowSetNoPacketInspectionFlag(p->flow);
DecodeSetNoPacketInspectionFlag(p); DecodeSetNoPacketInspectionFlag(p);
StreamTcpDisableAppLayer(p->flow); StreamTcpDisableAppLayer(p->flow);
PacketDrop(p, PKT_DROP_REASON_FLOW_DROP); PacketDrop(p, ACTION_DROP, PKT_DROP_REASON_FLOW_DROP);
/* return the segments to the pool */ /* return the segments to the pool */
StreamTcpSessionPktFree(p); StreamTcpSessionPktFree(p);
SCReturnInt(0); SCReturnInt(0);
@ -5131,7 +5131,7 @@ error:
* anyway. Doesn't disable all detection, so we can still * anyway. Doesn't disable all detection, so we can still
* match on the stream event that was set. */ * match on the stream event that was set. */
DecodeSetNoPayloadInspectionFlag(p); DecodeSetNoPayloadInspectionFlag(p);
PacketDrop(p, PKT_DROP_REASON_STREAM_ERROR); PacketDrop(p, ACTION_DROP, PKT_DROP_REASON_STREAM_ERROR);
} }
SCReturnInt(-1); SCReturnInt(-1);
} }

@ -41,7 +41,7 @@ void ExceptionPolicyApply(Packet *p, enum ExceptionPolicy policy, enum PacketDro
SCLogDebug("EXCEPTION_POLICY_DROP_PACKET"); SCLogDebug("EXCEPTION_POLICY_DROP_PACKET");
DecodeSetNoPayloadInspectionFlag(p); DecodeSetNoPayloadInspectionFlag(p);
DecodeSetNoPacketInspectionFlag(p); DecodeSetNoPacketInspectionFlag(p);
PacketDrop(p, drop_reason); PacketDrop(p, ACTION_DROP, drop_reason);
break; break;
case EXCEPTION_POLICY_BYPASS_FLOW: case EXCEPTION_POLICY_BYPASS_FLOW:
PacketBypassCallback(p); PacketBypassCallback(p);

Loading…
Cancel
Save