]> git.ipfire.org Git - thirdparty/suricata.git/log
thirdparty/suricata.git
19 months agodetect/flowbits: remove DETECT_FLOWBITS_CMD_NOALERT 10028/head
Shivani Bhardwaj [Sat, 9 Dec 2023 07:19:31 +0000 (12:49 +0530)] 
detect/flowbits: remove DETECT_FLOWBITS_CMD_NOALERT

DETECT_FLOWBITS_CMD_NOALERT is misleading as it gives an impression that
noalert is a flowbit specific command that'll be used and dealt with at
some point but as soon as noalert is found in the rule lang, signature
flag for noalert is set and control is returned. It never gets added to
cmd of the flowbits object.

19 months agodetect-engine: use flag SIG_FLAG_MPM_NEG
Shivani Bhardwaj [Thu, 7 Dec 2023 08:57:01 +0000 (14:27 +0530)] 
detect-engine: use flag SIG_FLAG_MPM_NEG

The flag SIG_FLAG_MPM_NEG is set before whitelisting the rules. Make it
better by checking for the flag in the beginning and return immediately.

19 months agodetect-engine: use bool return type
Shivani Bhardwaj [Thu, 7 Dec 2023 08:52:41 +0000 (14:22 +0530)] 
detect-engine: use bool return type

19 months agodetect: rename SigAddressPrepare fns to SigPrepare
Shivani Bhardwaj [Thu, 7 Dec 2023 07:23:51 +0000 (12:53 +0530)] 
detect: rename SigAddressPrepare fns to SigPrepare

There is nothing Address specific going on in the preparations.
Stage 1: Preprocessing happens. Sigs classified as IP Only, Masks
applied, content specific limits applied, etc and sig array built.
Stage 2: Sigs grouped by IPOnly, ports and protocols.
Stage 3: Decoder Events SGH built.
Stage 4: File flags set, sig grouping done per prefilter, etc.

19 months agodoc: clarify IP-only with iprep
Shivani Bhardwaj [Thu, 7 Dec 2023 11:48:24 +0000 (17:18 +0530)] 
doc: clarify IP-only with iprep

19 months agogithub/action: fix Debian 12 intermittent failures 10011/head
Victor Julien [Thu, 7 Dec 2023 09:07:24 +0000 (10:07 +0100)] 
github/action: fix Debian 12 intermittent failures

Parallel builds caused issues during `cargo vendor`. So do just a single
thread build.

 make[4]: Entering directory '/__w/suricata/suricata/rust'
cbindgen --config /__w/suricata/suricata/rust/cbindgen.toml \
--quiet --output /__w/suricata/suricata/rust/dist/rust-bindings.h
CARGO_HOME="/github/home/.cargo"  /usr/bin/cargo vendor
    Blocking waiting for file lock on package cache
    Blocking waiting for file lock on package cache
ERROR: Couldn't execute `cargo metadata` with manifest "/__w/suricata/suricata/rust/Cargo.toml": Metadata(Output { status: ExitStatus(unix_wait_status(25856)), stdout: "", stderr: "    Blocking waiting for file lock on package cache\n    Blocking waiting for file lock on package cache\nerror: failed to download `adler v1.0.2`\n\nCaused by:\n  unable to get packages from source\n\nCaused by:\n  failed to parse manifest at `/github/home/.cargo/registry/src/github.com-1ecc6299db9ec823/adler-1.0.2/Cargo.toml`\n\nCaused by:\n  no targets specified in the manifest\n  either src/lib.rs, src/main.rs, a [lib] section, or [[bin]] section must be present\n" })
ERROR: Couldn't generate bindings for /__w/suricata/suricata/rust.
make[4]: *** [Makefile:597: dist/rust-bindings.h] Error 1
make[4]: *** Waiting for unfinished jobs....

19 months agodetect/content-inspect: improve header docs 9999/head
Victor Julien [Wed, 6 Dec 2023 16:32:15 +0000 (17:32 +0100)] 
detect/content-inspect: improve header docs

19 months agodetect/content-inspect: optimize struct layout
Victor Julien [Tue, 26 Sep 2023 08:10:52 +0000 (10:10 +0200)] 
detect/content-inspect: optimize struct layout

Move members used by DetectEngineContentInspection() to the same cache line.

19 months agodetect: optimize struct layout
Victor Julien [Tue, 26 Sep 2023 08:10:14 +0000 (10:10 +0200)] 
detect: optimize struct layout

Move reference count to top of DetectEngineThreadCtx, to move it to the
same cache line as the other members that are checked first in Detect().

19 months agodetect/bytemath: pass match ctx directly
Victor Julien [Tue, 26 Sep 2023 07:34:09 +0000 (09:34 +0200)] 
detect/bytemath: pass match ctx directly

Adjust includes to enable this.

19 months agodetect/payload: remove unneeded pointer reset
Victor Julien [Mon, 25 Sep 2023 08:53:22 +0000 (10:53 +0200)] 
detect/payload: remove unneeded pointer reset

DetectEngineThreadCtx::replist is managed elsewhere.

19 months agodetect/isdataat: optimize recursion mismatches
Victor Julien [Mon, 25 Sep 2023 08:16:27 +0000 (10:16 +0200)] 
detect/isdataat: optimize recursion mismatches

Since recursive content matching goes through the buffer from left to
right, it is possible to bail early when isdataat is part of the
recursive checking. If `isdataat:50,relative` fails for offset 10, it
will surely also fail for offset 20. So break inspection in such cases.

The exception is for dynamic isdataat, where the value is determined
by a prior byte_extract that may be updated during the recursion.

19 months agodetect/content-inspect: flatten branches
Victor Julien [Sun, 24 Sep 2023 05:42:37 +0000 (07:42 +0200)] 
detect/content-inspect: flatten branches

Flatten else branches after terminating ifs.

19 months agodetect/content-inspect: localize recursion counting
Victor Julien [Sun, 24 Sep 2023 04:51:33 +0000 (06:51 +0200)] 
detect/content-inspect: localize recursion counting

Use stack local var instead of DetectEngineThreadCtx member. Instead
setup a stack local struct that both counts and holds the limit. Make sure
the limit is a const so we can avoid rereading it.

This is part of an effort to reduce the size of the DetectEngineThreadCtx
structure and reduce the number of memory writes to it. Additionally, it
is part of an effect to reduce the number of places where detection
tracks various forms of state.

19 months agodetect/content-inspect: reduce scope of internal func
Victor Julien [Sun, 24 Sep 2023 04:56:57 +0000 (06:56 +0200)] 
detect/content-inspect: reduce scope of internal func

19 months agodetect/base64: move content inspection logic
Victor Julien [Sat, 23 Sep 2023 11:01:05 +0000 (13:01 +0200)] 
detect/base64: move content inspection logic

Integrate with rest of content inspect code.

19 months agodetect/krb5.sname: use new content inspect entry
Victor Julien [Sat, 2 Dec 2023 08:45:15 +0000 (09:45 +0100)] 
detect/krb5.sname: use new content inspect entry

19 months agodetect/dns.query: use new content inspect entry
Victor Julien [Sat, 2 Dec 2023 08:44:58 +0000 (09:44 +0100)] 
detect/dns.query: use new content inspect entry

19 months agodetect/content-inspect: add entry for InspectionBuffer
Victor Julien [Sat, 2 Dec 2023 08:44:06 +0000 (09:44 +0100)] 
detect/content-inspect: add entry for InspectionBuffer

This is a convinience addition to abstract away the internals of
the InspectionBuffer in keyword specific detection code.

19 months agodetect/content-inspect: switch type of enum
Victor Julien [Sat, 2 Dec 2023 08:41:02 +0000 (09:41 +0100)] 
detect/content-inspect: switch type of enum

19 months agodetect/content-inspect: assist branch prediction
Victor Julien [Sat, 23 Sep 2023 07:32:14 +0000 (09:32 +0200)] 
detect/content-inspect: assist branch prediction

Hitting the recursion limit should be rare.

19 months agodetect/content-inspect: remove const casting
Victor Julien [Sat, 23 Sep 2023 07:26:12 +0000 (09:26 +0200)] 
detect/content-inspect: remove const casting

19 months agodetect/content-inspect: pass const to inspect func
Victor Julien [Mon, 25 Sep 2023 07:09:33 +0000 (09:09 +0200)] 
detect/content-inspect: pass const to inspect func

19 months agodetect/content-inspect: reduce scope of variables
Victor Julien [Mon, 25 Sep 2023 07:09:07 +0000 (09:09 +0200)] 
detect/content-inspect: reduce scope of variables

19 months agoutil/time: Improve usecs handling in time macros
Stephen Donnelly [Tue, 28 Nov 2023 21:23:45 +0000 (10:23 +1300)] 
util/time: Improve usecs handling in time macros

Fix SCTIME_ADD_SECS zeroing subsecond part

When adding s seconds to SCtime_t ts, don't zero out the ts.usecs field.

Issue: 6584

Fix SCTIME_FROM_TIMESPEC garbage microseconds part

When converting nanosecond to microseconds divide by 1000 instead
of multiplying by 1000.

Issue: 6585

19 months agonapatech: Fix packet timestamps
Ilya Bakhtin [Fri, 29 Sep 2023 14:56:48 +0000 (16:56 +0200)] 
napatech: Fix packet timestamps

Initialize both seconds and useconds of packet timestamp from napatech
timestamp format.

This commit uses updated macro definitions from util-utime.h to avoid
zero seconds value.

Issue: 6372

19 months agoutil/time: Prevent usecs overflow
Ilya Bakhtin [Fri, 29 Sep 2023 14:23:04 +0000 (16:23 +0200)] 
util/time: Prevent usecs overflow

This commit takes care of original seconds value and prevents the
useconds field from overflowing pas its maximum value.

Issue: 6372

20 months agopgsql: don't log password msg if password disabled 9985/head
Juliana Fajardini [Tue, 5 Dec 2023 13:56:28 +0000 (10:56 -0300)] 
pgsql: don't log password msg if password disabled

If the logging of the password is disabled, there isn't much point in
logging the password message itself.

20 months agodoc: add file.name information to smtp keyword doc
jason taylor [Wed, 20 Sep 2023 21:46:04 +0000 (21:46 +0000)] 
doc: add file.name information to smtp keyword doc

Signed-off-by: jason taylor <jtfas90@gmail.com>
20 months agodoc: add file.name information to nfs keyword doc
jason taylor [Wed, 20 Sep 2023 21:42:10 +0000 (21:42 +0000)] 
doc: add file.name information to nfs keyword doc

Signed-off-by: jason taylor <jtfas90@gmail.com>
20 months agodoc: add file.name information to smb keyword doc
jason taylor [Wed, 20 Sep 2023 20:58:21 +0000 (20:58 +0000)] 
doc: add file.name information to smb keyword doc

Signed-off-by: jason taylor <jtfas90@gmail.com>
20 months agodoc: update ftp keyword doc example rule format
jason taylor [Wed, 20 Sep 2023 20:51:52 +0000 (20:51 +0000)] 
doc: update ftp keyword doc example rule format

Signed-off-by: jason taylor <jtfas90@gmail.com>
20 months agodoc: add file.name information to ftp keyword doc
jason taylor [Wed, 20 Sep 2023 20:44:36 +0000 (20:44 +0000)] 
doc: add file.name information to ftp keyword doc

Signed-off-by: jason taylor <jtfas90@gmail.com>
20 months agodoc: add file.name information to http keyword doc
jason taylor [Wed, 20 Sep 2023 20:26:29 +0000 (20:26 +0000)] 
doc: add file.name information to http keyword doc

Signed-off-by: jason taylor <jtfas90@gmail.com>
20 months agoebpf: Update eBPF map to BTF defined map 9978/head
Vincent Li [Wed, 2 Aug 2023 20:31:54 +0000 (20:31 +0000)] 
ebpf: Update eBPF map to BTF defined map

legacy map definition is removed from libbpf1.0+.
update the legacy map definition to BTF defined map.

Distros with < libbpf1.0 (0.5, 0.6, 0.7, 0.8) bpf_helpers.h
support BTF map definition, this change does not break
old libbpf and support new libpbf1.0+.

Bug: #6250

Signed-off-by: Vincent Li <vincent.mc.li@gmail.com>
Co-authored-by: Victor Julien <vjulien@oisf.net>
20 months agopgsql: remove probe_ts function
Juliana Fajardini [Mon, 27 Nov 2023 20:01:33 +0000 (17:01 -0300)] 
pgsql: remove probe_ts function

With the changes in the probing_ts function, this other one could become
obsolete. Remove it, and directly call `parser::parse_request` when
checking for gaps, instead.

20 months agopgsql: remove unused error handling call
Juliana Fajardini [Mon, 27 Nov 2023 20:17:11 +0000 (17:17 -0300)] 
pgsql: remove unused error handling call

20 months agopgsql: don't log unknown message type
Juliana Fajardini [Mon, 27 Nov 2023 20:16:52 +0000 (17:16 -0300)] 
pgsql: don't log unknown message type

20 months agopgsql: fix probing functions
Juliana Fajardini [Thu, 23 Nov 2023 11:14:24 +0000 (08:14 -0300)] 
pgsql: fix probing functions

Some non-pgsql traffic seen by Suricata is mistankenly identified as
pgsql, as the probing function is too generic. Now, if the parser sees
an unknown message type, even if it looks like pgsql, it will fail.

Bug #6080

20 months agopgsql: add unknonwn frontend message type
Juliana Fajardini [Mon, 27 Nov 2023 20:22:19 +0000 (17:22 -0300)] 
pgsql: add unknonwn frontend message type

We had unkonwn message type for the backend, but not the frontend
messages. It's important to better identify those to improve pgsql
probing functions.

Related to
Bug #6080

20 months agodetect-engine: use ports only after edge case handling 9964/head
Shivani Bhardwaj [Mon, 4 Dec 2023 14:36:57 +0000 (20:06 +0530)] 
detect-engine: use ports only after edge case handling

Also, add comments to clarify what's happening in the code.

20 months agodetect: remove misleading comment
Shivani Bhardwaj [Tue, 21 Nov 2023 08:50:49 +0000 (14:20 +0530)] 
detect: remove misleading comment

The comment seems to have come from the enum for addresses where IPv4
and IPv6 matters.

20 months agodetect/port: remove BUG_ON in favor of PORT_ER
Shivani Bhardwaj [Tue, 21 Nov 2023 08:23:09 +0000 (13:53 +0530)] 
detect/port: remove BUG_ON in favor of PORT_ER

Either the BUG_ON condition would hit or PORT_ER. Prefer to return error
in case of an error as the fn expects that.

20 months agodetect/engine: defensive check and comment update
Shivani Bhardwaj [Mon, 20 Nov 2023 12:30:37 +0000 (18:00 +0530)] 
detect/engine: defensive check and comment update

20 months agodetect: remove redundant null setting
Shivani Bhardwaj [Mon, 20 Nov 2023 11:44:13 +0000 (17:14 +0530)] 
detect: remove redundant null setting

de_ctx->dport_hash_table is already set to NULL in the fn
DetectPortHashFree which is called right before this setting.
Remove the redundant setting.

20 months agodetect: use proper names for whitelist score criteria
Shivani Bhardwaj [Mon, 20 Nov 2023 11:42:54 +0000 (17:12 +0530)] 
detect: use proper names for whitelist score criteria

20 months agodetect/engine: fix whitelisted port range check
Shivani Bhardwaj [Thu, 16 Nov 2023 08:18:06 +0000 (13:48 +0530)] 
detect/engine: fix whitelisted port range check

So far, the condition for checking if the whitelisted port was in the
port range of "a" said

a->port >= w->port && a->port2 <= w->port

But, if a->port <= a->port2, this condition could only be true when
a->port == w->port == a->port2. However, the motivation for this fn was
to be able to find if the whitelisted port for a carrier proto already
was in the range of the given protocol and calculate a score for the
port accordingly.
Fix the range check such that a->port <= w->port <= a->port2.

20 months agodetect: rename whitelist to score
Shivani Bhardwaj [Thu, 16 Nov 2023 08:11:39 +0000 (13:41 +0530)] 
detect: rename whitelist to score

The term "whitelist" is actually used to store a list of DetectPort type
items for tcp and udp in detect.h. Using the same term for also keeping
the score that affects the grouping of rules is confusing. So, rename
the variable to "score".

20 months agodetect-engine: use only the exact match fn
Shivani Bhardwaj [Wed, 1 Nov 2023 10:31:35 +0000 (16:01 +0530)] 
detect-engine: use only the exact match fn

DetectFlagsSignatureNeedsSynPackets checks if TCP SYN flag is set among
other flags.
DetectFlagsSignatureNeedsSynOnlyPackets checks if only TCP SYN flag is
set and no other flag.

Since DetectFlagsSignatureNeedsSynOnlyPackets also already checks for
TCP SYN flag, it does not need to be used in combination with
DetectFlagsSignatureNeedsSynPackets as this fn seems to be the superset
of the former.

20 months agodetect/asn1: handle in PMATCH
Victor Julien [Mon, 25 Sep 2023 18:14:29 +0000 (20:14 +0200)] 
detect/asn1: handle in PMATCH

Since the asn1 keyword is processing payload data, move the handling of
the keyword into the PMATCH with content inspection.

Use u32 as buffer length in the Rust FFI

20 months agoflow/timeout: clean up flow finish code 9939/head
Victor Julien [Fri, 1 Dec 2023 08:47:57 +0000 (09:47 +0100)] 
flow/timeout: clean up flow finish code

20 months agoflow/timeout: use single packet for timeout handling
Victor Julien [Mon, 25 Sep 2023 09:58:03 +0000 (11:58 +0200)] 
flow/timeout: use single packet for timeout handling

In the FlowFinish logic, one or two pseudo packets are used to finish flow
handling. In the case of 2 (one per direction), the logic first set up the
2 packets, then it would process them one by one. This lead to poor cache
locality.

This patch processes the first packet entirely first, followed by the second
packet.

20 months agoflow/timeout: use const TcpSession; cleanup prototypes
Victor Julien [Fri, 1 Dec 2023 08:47:13 +0000 (09:47 +0100)] 
flow/timeout: use const TcpSession; cleanup prototypes

20 months agodetect/content-inspect: minor code cleanups
Victor Julien [Sun, 24 Sep 2023 05:26:24 +0000 (07:26 +0200)] 
detect/content-inspect: minor code cleanups

20 months agodetect/replace: minor code cleanup
Victor Julien [Fri, 22 Sep 2023 08:14:23 +0000 (10:14 +0200)] 
detect/replace: minor code cleanup

20 months agodetect/content: minor code/comment cleanups
Victor Julien [Fri, 22 Sep 2023 07:48:56 +0000 (09:48 +0200)] 
detect/content: minor code/comment cleanups

20 months agodetect/content: use const pointer where possible
Victor Julien [Fri, 22 Sep 2023 08:14:11 +0000 (10:14 +0200)] 
detect/content: use const pointer where possible

20 months agodetect/app-layer-events: constify arguments; minor cleanups
Victor Julien [Wed, 27 Sep 2023 10:23:23 +0000 (12:23 +0200)] 
detect/app-layer-events: constify arguments; minor cleanups

20 months agodetect: improve explanation of offset tracking
Victor Julien [Thu, 12 Oct 2023 13:31:35 +0000 (15:31 +0200)] 
detect: improve explanation of offset tracking

20 months agodetect/content: test cleanup
Victor Julien [Thu, 5 Oct 2023 14:15:28 +0000 (16:15 +0200)] 
detect/content: test cleanup

20 months agodetect/bytejump: fix debug messages
Victor Julien [Thu, 5 Oct 2023 13:46:18 +0000 (15:46 +0200)] 
detect/bytejump: fix debug messages

Remove newlines.

20 months agodetect/file.data: modernize test
Victor Julien [Thu, 5 Oct 2023 14:24:15 +0000 (16:24 +0200)] 
detect/file.data: modernize test

20 months agodetect: modernize unittest
Victor Julien [Thu, 5 Oct 2023 13:33:05 +0000 (15:33 +0200)] 
detect: modernize unittest

20 months agodetect/content-inspect: keyword context as const
Victor Julien [Tue, 26 Sep 2023 13:55:09 +0000 (15:55 +0200)] 
detect/content-inspect: keyword context as const

20 months agodetect/pcre: match data is const at match time
Victor Julien [Thu, 5 Oct 2023 08:25:16 +0000 (10:25 +0200)] 
detect/pcre: match data is const at match time

20 months agodetect/http.uri: modernize unittest
Victor Julien [Mon, 25 Sep 2023 18:40:42 +0000 (20:40 +0200)] 
detect/http.uri: modernize unittest

20 months agoutil/print: minor code cleanups
Victor Julien [Sat, 7 Oct 2023 05:01:20 +0000 (07:01 +0200)] 
util/print: minor code cleanups

20 months agorust: add copyright header to common.rs
Victor Julien [Tue, 28 Nov 2023 13:59:19 +0000 (14:59 +0100)] 
rust: add copyright header to common.rs

20 months agoutil/prefilter: constify sids
Victor Julien [Mon, 27 Nov 2023 10:41:58 +0000 (11:41 +0100)] 
util/prefilter: constify sids

20 months agompm: free sids in MpmFreePattern as well
Victor Julien [Mon, 27 Nov 2023 09:05:55 +0000 (10:05 +0100)] 
mpm: free sids in MpmFreePattern as well

20 months agompm: cleanup pattern free function
Victor Julien [Mon, 27 Nov 2023 08:52:15 +0000 (09:52 +0100)] 
mpm: cleanup pattern free function

Avoid redundant pointer checks; instead check once.

20 months agompm/ac-bs: add warning if still used
Victor Julien [Tue, 28 Nov 2023 13:17:19 +0000 (14:17 +0100)] 
mpm/ac-bs: add warning if still used

Fall back to default matcher.

Ticket #6586.

20 months agompm: document Search callback return value
Victor Julien [Tue, 28 Nov 2023 11:22:18 +0000 (12:22 +0100)] 
mpm: document Search callback return value

20 months agompm/ac-ks: return only unique match count
Victor Julien [Tue, 28 Nov 2023 11:16:41 +0000 (12:16 +0100)] 
mpm/ac-ks: return only unique match count

Bring implementation in line with Hyperscan, which only counts unique matches.

Update test to reflect the new behavior.

20 months agompm/ac: return only unique match count
Victor Julien [Tue, 28 Nov 2023 11:08:20 +0000 (12:08 +0100)] 
mpm/ac: return only unique match count

Bring implementation in line with Hyperscan, which only counts unique matches.

Update test to reflect the new behavior.

20 months agompm: remove ac-bs implementation
Victor Julien [Tue, 28 Nov 2023 11:01:19 +0000 (12:01 +0100)] 
mpm: remove ac-bs implementation

Ticket: #6586.

20 months agodetect: minor cleanup
Victor Julien [Tue, 28 Nov 2023 11:19:59 +0000 (12:19 +0100)] 
detect: minor cleanup

MPM_HS does not need a guard.

20 months agouserguide: remove old css files
Jason Ish [Thu, 30 Nov 2023 17:46:14 +0000 (11:46 -0600)] 
userguide: remove old css files

In our conf.py we reference some ReadTheDocs stylesheets that appear to
be old and break formatting of some items like bulletted lists.

Bug: #6589

20 months agodetect: reimplement discontinue matching logic
Victor Julien [Fri, 22 Sep 2023 19:08:29 +0000 (21:08 +0200)] 
detect: reimplement discontinue matching logic

Previously various steps in the content inspection logic would use
a variable in the DetectEngineThreadCtx to flag that matching should
be discontinued.

This patch reimplements this logic by using a new return code instead.

Split content inspection into public and private version, so that
common initialization can be done in a single place.

Update the callsites.

20 months agodetect/file-data: simplify content inspect loop
Victor Julien [Sat, 23 Sep 2023 05:15:33 +0000 (07:15 +0200)] 
detect/file-data: simplify content inspect loop

20 months agodetect-engine: minor content inspection cleanup
Victor Julien [Sat, 23 Sep 2023 05:43:54 +0000 (07:43 +0200)] 
detect-engine: minor content inspection cleanup

20 months agopacket: minor macro cleanups
Victor Julien [Sat, 25 Nov 2023 07:33:53 +0000 (08:33 +0100)] 
packet: minor macro cleanups

20 months agopacket: access packet data through flex array
Victor Julien [Sat, 25 Nov 2023 06:43:34 +0000 (07:43 +0100)] 
packet: access packet data through flex array

20 months agolog-pcap: constify PcapWrite args
Victor Julien [Sat, 25 Nov 2023 06:43:16 +0000 (07:43 +0100)] 
log-pcap: constify PcapWrite args

General cleanup, but also needed for packet changes.

20 months agodevice/storage: use flex array instead of calculated ptr
Victor Julien [Fri, 24 Nov 2023 18:41:47 +0000 (19:41 +0100)] 
device/storage: use flex array instead of calculated ptr

20 months agoippair/storage: use flex array instead of calculated ptr
Victor Julien [Fri, 24 Nov 2023 18:38:16 +0000 (19:38 +0100)] 
ippair/storage: use flex array instead of calculated ptr

20 months agohost/storage: use flex array for host storage
Victor Julien [Fri, 24 Nov 2023 18:35:54 +0000 (19:35 +0100)] 
host/storage: use flex array for host storage

20 months agoflow/storage: use flex array instead of calculated ptr
Victor Julien [Fri, 24 Nov 2023 18:28:37 +0000 (19:28 +0100)] 
flow/storage: use flex array instead of calculated ptr

20 months agostorage: use proper type instead of void ptr
Victor Julien [Fri, 24 Nov 2023 18:28:17 +0000 (19:28 +0100)] 
storage: use proper type instead of void ptr

20 months agostorage: remove unused code
Victor Julien [Fri, 24 Nov 2023 18:17:57 +0000 (19:17 +0100)] 
storage: remove unused code

Only used in a unittest; removed that as well.

20 months agosource: fix resource leak 9907/head
Philippe Antoine [Mon, 27 Nov 2023 12:40:44 +0000 (13:40 +0100)] 
source: fix resource leak

CID: 1426081

20 months agodetect/filestore: fix memory leak on sig parsing 9895/head
Philippe Antoine [Mon, 27 Nov 2023 10:10:50 +0000 (11:10 +0100)] 
detect/filestore: fix memory leak on sig parsing

Ticket: 6574

Introduced by commit c272a646c5ae739d18901776cc5a940afd3d3d38

20 months agostats: improve sync signalling 9882/head
Victor Julien [Wed, 22 Nov 2023 08:31:38 +0000 (09:31 +0100)] 
stats: improve sync signalling

Make syncs more reliable by using a atomic "sync now" variable and
signalling the conditions under lock.

Ticket: #6569.

20 months agostats: turn sync macros into functions
Victor Julien [Wed, 22 Nov 2023 08:31:09 +0000 (09:31 +0100)] 
stats: turn sync macros into functions

20 months agoflow: fix condition signalling
Victor Julien [Wed, 22 Nov 2023 08:03:09 +0000 (09:03 +0100)] 
flow: fix condition signalling

Signal threads while holding lock. This should make the signalling
more reliable.

From PTHREAD_COND(3):

"Unlocking the mutex and suspending on the condition variable is done
 atomically. Thus, if all threads always acquire the mutex before
 signaling the condition, this guarantees that the condition cannot be
 signaled (and thus ignored) between the time a thread locks the
 mutex and the time it waits on the condition variable."

Ticket: #6569.

20 months agoippair: fix minor coverity warning
Victor Julien [Wed, 22 Nov 2023 07:21:23 +0000 (08:21 +0100)] 
ippair: fix minor coverity warning

CID 1554232:  Data race undermines locking  (LOCK_EVASION)

Ticket #6565.

20 months agohost: fix minor coverity warning
Victor Julien [Wed, 22 Nov 2023 07:17:45 +0000 (08:17 +0100)] 
host: fix minor coverity warning

CID 1554240:  Data race undermines locking  (LOCK_EVASION)

20 months agodetect/xbits: fix coverity warning
Philippe Antoine [Tue, 21 Nov 2023 20:31:10 +0000 (21:31 +0100)] 
detect/xbits: fix coverity warning

CID 1554237 and CID 1554233

Basically make the code easier to reason with for coverity
without changing the behavior which was fine.

20 months agopacketpool: signal condition within lock 9859/head
Victor Julien [Thu, 16 Nov 2023 14:29:53 +0000 (15:29 +0100)] 
packetpool: signal condition within lock

Completes: dc40a139acb3 ("packetpool: signal waiter within lock")

20 months agopacketpool: dynamic return threshold
Victor Julien [Wed, 13 Sep 2023 05:01:53 +0000 (07:01 +0200)] 
packetpool: dynamic return threshold

Problem:

In pcap autofp mode, there is one threads reading packets (RX). These packets
are then passed on to worker threads. When these workers are done with a
packet, they return packets to the pcap reader threads packet pool, which is
the owner of the packets. Since this requires expensive synchronization between
threads, there is logic in place to batch this operation.

When the reader thread depletes its pool, it notifies the other threads that
it is starving and that a sync needs to happen asap. Then the reader enters
a wait state. During this time no new packets are read.

However, there is a problem with this approach. When the reader encountered
an empty pool, it would set an atomic flag that it needed a sync. The first
worker to return a packet to the pool would then set this flag, sync, and
unset the flag. This forced sync could result in just a single packet being
synchronized, or several. So if unlucky, the reader would just get a single
packet before hitting the same condition again.

Solution:

This patch updates the logic to use a new approach. Instead of using a
binary flag approach where the behavior only changes when the reader is
already starved, it uses a dynamic sync threshold that is controlled by
the reader. The reader keeps a running count of packets it its pool,
and calculates the percentage of available packets. This percentage is
then used to set the sync threshold.

When the pool is starved, it sets the threshold to 1 (sync for each packet).
After each successful get/sync the threshold is adjusted.