Skip to content

Commit

Permalink
output: do not use tx id 0 when there is no tx
Browse files Browse the repository at this point in the history
Ticket: 6846

This led to packet rules logging irrelevant app-layer data
  • Loading branch information
catenacyber authored and victorjulien committed Apr 17, 2024
1 parent d7026b7 commit 910f6af
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
10 changes: 8 additions & 2 deletions src/detect-engine-alert.c
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ static inline PacketAlert PacketAlertSet(
pa.s = (Signature *)s;
pa.flags = alert_flags;
/* Set tx_id if the frame has it */
pa.tx_id = (tx_id == UINT64_MAX) ? 0 : tx_id;
pa.tx_id = tx_id;
pa.frame_id = (alert_flags & PACKET_ALERT_FLAG_FRAME) ? det_ctx->frame_id : 0;
return pa;
}
Expand Down Expand Up @@ -317,8 +317,14 @@ static int AlertQueueSortHelper(const void *a, const void *b)
{
const PacketAlert *pa0 = a;
const PacketAlert *pa1 = b;
if (pa1->num == pa0->num)
if (pa1->num == pa0->num) {
if (pa1->tx_id == PACKET_ALERT_NOTX) {
return -1;
} else if (pa0->tx_id == PACKET_ALERT_NOTX) {
return 1;
}
return pa0->tx_id < pa1->tx_id ? 1 : -1;
}
return pa0->num > pa1->num ? 1 : -1;
}

Expand Down
13 changes: 12 additions & 1 deletion src/detect.c
Original file line number Diff line number Diff line change
Expand Up @@ -807,7 +807,18 @@ static inline void DetectRulePacketRules(
#endif
DetectRunPostMatch(tv, det_ctx, p, s);

AlertQueueAppend(det_ctx, s, p, 0, alert_flags);
uint64_t txid = PACKET_ALERT_NOTX;
if ((alert_flags & PACKET_ALERT_FLAG_STREAM_MATCH) ||
(s->alproto != ALPROTO_UNKNOWN && pflow->proto == IPPROTO_UDP)) {
// if there is a stream match (TCP), or
// a UDP specific app-layer signature,
// try to use the last tx
if (pflow->alstate) {
txid = AppLayerParserGetTxCnt(pflow, pflow->alstate) - 1;
alert_flags |= PACKET_ALERT_FLAG_TX;
}
}
AlertQueueAppend(det_ctx, s, p, txid, alert_flags);
next:
DetectVarProcessList(det_ctx, pflow, p);
DetectReplaceFree(det_ctx);
Expand Down
3 changes: 3 additions & 0 deletions src/detect.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@
* classtype. */
#define DETECT_DEFAULT_PRIO 3

// tx_id value to use when there is no transaction
#define PACKET_ALERT_NOTX UINT64_MAX

/* forward declarations for the structures from detect-engine-sigorder.h */
struct SCSigOrderFunc_;
struct SCSigSignatureWrapper_;
Expand Down

0 comments on commit 910f6af

Please sign in to comment.