]> git.ipfire.org Git - thirdparty/suricata.git/log
thirdparty/suricata.git
11 years agoclassification: add category to some stream rules 866/head
Eric Leblond [Wed, 8 Jan 2014 19:28:21 +0000 (20:28 +0100)] 
classification: add category to some stream rules

All stream events signatures deserve a category.

11 years agorunmode: remove unused variable.
Eric Leblond [Wed, 8 Jan 2014 14:55:58 +0000 (15:55 +0100)] 
runmode: remove unused variable.

default_mode_auto is not used anymore and can be removed.

11 years agoExit if BPF filter file is specified in IPS mode
Eric Leblond [Wed, 26 Feb 2014 10:13:33 +0000 (11:13 +0100)] 
Exit if BPF filter file is specified in IPS mode

This patch adds a check that was missing when specifying BPF filter
from a file. Suricata behavior should have been the same as when
BPF filter is specified on command line.

11 years agoipfw: fix operator error in test
Eric Leblond [Thu, 27 Feb 2014 17:39:07 +0000 (18:39 +0100)] 
ipfw: fix operator error in test

Fix warning spotted by clang on FreeBSD:

source-ipfw.c:241:49: warning: use of logical '||' with constant operand [-Wconstant-logical-operand]
        if (suricata_ctl_flags & (SURICATA_STOP || SURICATA_KILL)) {
                                                ^  ~~~~~~~~~~~~~
source-ipfw.c:241:49: note: use '|' for a bitwise operation
        if (suricata_ctl_flags & (SURICATA_STOP || SURICATA_KILL)) {
                                                ^~
                                                |

Use same logic as the one used in other capture mode.

11 years agoipfw: improve exit message
Eric Leblond [Thu, 27 Feb 2014 17:16:13 +0000 (18:16 +0100)] 
ipfw: improve exit message

This patch synchronizes the exit message with what is done in
NFQ capture mode.

11 years agoipfw: update running modes to hide device stats
Eric Leblond [Thu, 27 Feb 2014 17:12:37 +0000 (18:12 +0100)] 
ipfw: update running modes to hide device stats

This patch adds call to the function used to disable the display
of live device stats at exit.

11 years agonfq: update message displayed at exit
Eric Leblond [Thu, 27 Feb 2014 17:08:46 +0000 (18:08 +0100)] 
nfq: update message displayed at exit

This patch updates the message displayed at exit to have something
more readable.

11 years agonfq: update running modes to hide device stats
Eric Leblond [Thu, 27 Feb 2014 17:07:34 +0000 (18:07 +0100)] 
nfq: update running modes to hide device stats

This patch adds call to the function used to disable the display
of live device stats at exit.

11 years agoutil-device: add function to avoid stat display
Eric Leblond [Thu, 27 Feb 2014 17:03:13 +0000 (18:03 +0100)] 
util-device: add function to avoid stat display

In the case of running mode like NFQ there is no need possibility
to compute the statistics as it is done in LiveDevice (drop and
checksum count are meaningless).

This patch adds a function that allow running mode to disable the
display of the counters at exit.

11 years agoutil-device: fix debug message
Eric Leblond [Thu, 27 Feb 2014 16:33:42 +0000 (17:33 +0100)] 
util-device: fix debug message

Reference to Pcap was not correct.

11 years agoMove memcpy_lower() into new util-memcpy.h
Ken Steele [Wed, 26 Feb 2014 21:42:22 +0000 (16:42 -0500)] 
Move memcpy_lower() into new util-memcpy.h

Remove local copies from each MPM file and use include file instead.
Might be better to also add util-memcpy.c rather than inlining it each time,
to get smaller code, since only seems to be used at initialization.

11 years agoStore case-insensitive patterns as lowercase.
Ken Steele [Wed, 26 Feb 2014 21:15:42 +0000 (16:15 -0500)] 
Store case-insensitive patterns as lowercase.

This is required because SCMemcmpLowercase() expects it first argument
to be already lowercase for the comparison. This is done by using
memcpy_tolower() for NO_CASE patterns.

This addresses code review comments from Victor.

11 years agoRemove case_state usage
Ken Steele [Fri, 14 Feb 2014 04:21:53 +0000 (23:21 -0500)] 
Remove case_state usage

The case_state in MPMs was just to track when a pid could have no-case and
case-sensitive matches for the same PID. Now that can't happen after fixing
bug 1110, so remove the code and storage for case_state.

11 years agoWhen assigning Pattern IDs pids, check Case flags
Ken Steele [Fri, 14 Feb 2014 03:38:33 +0000 (22:38 -0500)] 
When assigning Pattern IDs pids, check Case flags

This fixes bug 1110. When assigning PIDs, use the NO_CASE flag when comparing
for duplicates. The state of the flag must be the same, but also use the same
type of comparisons when checking for duplicates.

Previously, "foo":CS would match with "foo":CI when it should not.
and "foo":CI would not match "FoO":CI when it should. Both of those
cases are fixed with this change.

This then allows simplifying the use of pid in MPMs because now if they
pids match, then so do the flags, so checking the flags is not required.

11 years agoCleanup in ac-tile MPM
Ken Steele [Wed, 12 Feb 2014 20:23:44 +0000 (15:23 -0500)] 
Cleanup in ac-tile MPM

Remove return from void functions.
Add some commments
Remove inline on functions where it doesn't make sense.
Rewrote if statement to be more clear.

11 years agounittest: fix mutex unlock w/o a lock 859/head
Victor Julien [Thu, 27 Feb 2014 13:31:46 +0000 (14:31 +0100)] 
unittest: fix mutex unlock w/o a lock

Fixes an error in a test. SCMutexUnlock was called w/o a prior
SCMutexLock.

11 years agopool: on Init() error, properly clean up
Victor Julien [Thu, 27 Feb 2014 12:23:45 +0000 (13:23 +0100)] 
pool: on Init() error, properly clean up

In the stream engine, Init() can fail if the memcap is reached. In this
case the segment was not freed by PoolGet:

==8600== Thread 1:
==8600== 70,480 bytes in 1,762 blocks are definitely lost in loss record 611 of 612
==8600==    at 0x4C2A2DB: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==8600==    by 0x914CC8: TcpSegmentPoolAlloc (stream-tcp-reassemble.c:166)
==8600==    by 0xA0D315: PoolGet (util-pool.c:297)
==8600==    by 0x9302CD: StreamTcpGetSegment (stream-tcp-reassemble.c:3768)
==8600==    by 0x921FE8: StreamTcpReassembleHandleSegmentHandleData (stream-tcp-reassemble.c:1873)
==8600==    by 0x92EEDA: StreamTcpReassembleHandleSegment (stream-tcp-reassemble.c:3584)
==8600==    by 0x8D3BB1: HandleEstablishedPacketToServer (stream-tcp.c:1969)
==8600==    by 0x8D7F98: StreamTcpPacketStateEstablished (stream-tcp.c:2323)
==8600==    by 0x8F13B8: StreamTcpPacket (stream-tcp.c:4243)
==8600==    by 0x8F2537: StreamTcp (stream-tcp.c:4485)
==8600==    by 0x95DFBB: TmThreadsSlotVarRun (tm-threads.c:559)
==8600==    by 0x8BE60D: TmThreadsSlotProcessPkt (tm-threads.h:142)

tcp.segment_memcap_drop   | PcapFile                  | 1762

This patch fixes PoolGet to both Cleanup and Free the Alloc'd data in
case Init fails.

11 years agoFix memory leak in proto - name mapping
Victor Julien [Thu, 27 Feb 2014 10:35:47 +0000 (11:35 +0100)] 
Fix memory leak in proto - name mapping

==15745== 3 bytes in 1 blocks are definitely lost in loss record 5 of 615
==15745==    at 0x4C2A2DB: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15745==    by 0x71858C1: strdup (strdup.c:42)
==15745==    by 0xA20814: SCProtoNameInit (util-proto-name.c:75)
==15745==    by 0x952D1B: PostConfLoadedSetup (suricata.c:1983)
==15745==    by 0x9537CD: main (suricata.c:2112)

Also, clean up and add a check to make sure it's initialized only once.

11 years agolua: fix minor memory leak
Victor Julien [Thu, 27 Feb 2014 09:59:50 +0000 (10:59 +0100)] 
lua: fix minor memory leak

The full path of the script names is stored in a buffer that wasn't
freed at exit.

==24195== 41 bytes in 1 blocks are definitely lost in loss record 300 of 613
==24195==    at 0x4C2A2DB: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==24195==    by 0x565D06: DetectLoadCompleteSigPath (detect.c:251)
==24195==    by 0x7CABE8: DetectLuajitParse (detect-luajit.c:595)
==24195==    by 0x7CD2AE: DetectLuajitSetup (detect-luajit.c:827)
==24195==    by 0x7DC273: SigParseOptions (detect-parse.c:547)
==24195==    by 0x7DDC75: SigParse (detect-parse.c:856)
==24195==    by 0x7E1C2B: SigInitHelper (detect-parse.c:1336)
==24195==    by 0x7E2968: SigInit (detect-parse.c:1559)
==24195==    by 0x7E37B1: DetectEngineAppendSig (detect-parse.c:1831)
==24195==    by 0x566D17: DetectLoadSigFile (detect.c:335)
==24195==    by 0x567636: SigLoadSignatures (detect.c:423)
==24195==    by 0x951A97: LoadSignatures (suricata.c:1816)

This patch frees the buffer.

11 years agoprofiling: fix memory leak
Victor Julien [Thu, 27 Feb 2014 09:55:01 +0000 (10:55 +0100)] 
profiling: fix memory leak

For packets that were freed, not recycled, profiling memory wasn't
freed:

==15745== 13,312 bytes in 8 blocks are definitely lost in loss record 611 of 615
==15745==    at 0x4C2C494: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15745==    by 0xA190D5: SCProfilePacketStart (util-profiling.c:963)
==15745==    by 0x4E4345: PacketGetFromAlloc (decode.c:134)
==15745==    by 0x83FE75: FlowForceReassemblyPseudoPacketGet (flow-timeout.c:276)
==15745==    by 0x8413BF: FlowForceReassemblyForHash (flow-timeout.c:588)
==15745==    by 0x841897: FlowForceReassembly (flow-timeout.c:716)
==15745==    by 0x9540F6: main (suricata.c:2296)
==15745==
==15745== 14,976 bytes in 9 blocks are definitely lost in loss record 612 of 615
==15745==    at 0x4C2C494: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==15745==    by 0xA190D5: SCProfilePacketStart (util-profiling.c:963)
==15745==    by 0x4E4345: PacketGetFromAlloc (decode.c:134)
==15745==    by 0x83FE75: FlowForceReassemblyPseudoPacketGet (flow-timeout.c:276)
==15745==    by 0x841508: FlowForceReassemblyForHash (flow-timeout.c:620)
==15745==    by 0x841897: FlowForceReassembly (flow-timeout.c:716)
==15745==    by 0x9540F6: main (suricata.c:2296)

This patch addresses that.

11 years agolock profiling: fix memory leak
Victor Julien [Tue, 7 Jan 2014 10:56:23 +0000 (11:56 +0100)] 
lock profiling: fix memory leak

If lock profiling was compiled in, but disabled in the config a
serious memory leak condition was triggered.

Valgrind output:

==11169== 9,091,248 bytes in 189,401 blocks are definitely lost in loss record 564 of 564
==11169==    at 0x4C2A2DB: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==11169==    by 0xABC44C: LockRecordAdd (util-profiling-locks.c:112)
==11169==    by 0xABC950: SCProfilingAddPacketLocks (util-profiling-locks.c:141)
==11169==    by 0xA04CD5: TmThreadsSlotVarRun (tm-threads.c:562)
==11169==    by 0x958793: TmThreadsSlotProcessPkt (tm-threads.h:142)
==11169==    by 0x9599C3: PcapFileCallbackLoop (source-pcap-file.c:172)
==11169==    by 0x56FC130: ??? (in /usr/lib/x86_64-linux-gnu/libpcap.so.1.4.0)
==11169==    by 0x959D24: ReceivePcapFileLoop (source-pcap-file.c:210)
==11169==    by 0xA05B9E: TmThreadsSlotPktAcqLoop (tm-threads.c:703)
==11169==    by 0x6155F6D: start_thread (pthread_create.c:311)
==11169==    by 0x6E399CC: clone (clone.S:113)

11 years agocapture: use 64 bits counters 858/head
Eric Leblond [Thu, 27 Feb 2014 10:47:38 +0000 (11:47 +0100)] 
capture: use 64 bits counters

Some of the packets counters were using a 32bit integer. Given the
bandwidth that is often seen, this is not a good idea. This patch
switches to 64bit counter.

11 years agoaf-packet: fix livedev packets counter
Eric Leblond [Thu, 27 Feb 2014 10:41:07 +0000 (11:41 +0100)] 
af-packet: fix livedev packets counter

Packets counter is incremented in AFPDumpCounters and it was
also incremented during packet reading. The result was a value
that is twice the expected result.

Spotted-by: Victor Julien <victor@inliniac.net>
11 years agostream-tcp: proper error if segment pool init fails 855/head
Victor Julien [Wed, 26 Feb 2014 14:18:26 +0000 (15:18 +0100)] 
stream-tcp: proper error if segment pool init fails

Until now a PoolInit failure for the segment pools would result in
an abort() through BUG_ON(). This patch adds a proper error message,
then exits.

Bug #1108.

11 years agostream-tcp: fix error handling in segment pool
Victor Julien [Wed, 26 Feb 2014 14:14:14 +0000 (15:14 +0100)] 
stream-tcp: fix error handling in segment pool

When TcpSegmentPoolInit fails (e.g. because of a too low memcap),
it would free the segment. However, the segment memory is managed
by the Pool API, which would also free the same memory location.
This patch fixes that.

Also, memset the structure before any checks are done, as the segment
memory is passed to TcpSegmentPoolCleanup in case of error as well.

Bug #1108

11 years agocommandline parsing: check optarg ptr before using it 853/head
Victor Julien [Wed, 26 Feb 2014 11:41:15 +0000 (12:41 +0100)] 
commandline parsing: check optarg ptr before using it

Fixes:
** CID 1075221:  Dereference after null check  (FORWARD_NULL)
/src/suricata.c: 1344 in ParseCommandLine()

The reason it gave this warning is that in other paths using optarg
there was a check, so the checker assumed optarg can be NULL.

11 years agoicmpv6: Fix Coverity warnings on ND_* types
Victor Julien [Wed, 26 Feb 2014 11:21:24 +0000 (12:21 +0100)] 
icmpv6: Fix Coverity warnings on ND_* types

This patch fixes:
** CID 1187544:  Missing break in switch  (MISSING_BREAK)
/src/decode-icmpv6.c: 268 in DecodeICMPV6()

** CID 1187545:  Missing break in switch  (MISSING_BREAK)
/src/decode-icmpv6.c: 270 in DecodeICMPV6()

** CID 1187546:  Missing break in switch  (MISSING_BREAK)
/src/decode-icmpv6.c: 272 in DecodeICMPV6()

** CID 1187547:  Missing break in switch  (MISSING_BREAK)
/src/decode-icmpv6.c: 274 in DecodeICMPV6()

It duplicates the logic instead of adding 'fall through' statements
as the debug statements were wrong and confusing. For ND_REDIRECT
all 5 ND_* types would have been printed.

11 years agoOnly update mPipe stats occasionally around the packet loop.
Ken Steele [Fri, 21 Feb 2014 21:03:57 +0000 (16:03 -0500)] 
Only update mPipe stats occasionally around the packet loop.

Check for termination or stats update only once every 10,000 times
around the mPipe packet processing loop, to reduce locking.

11 years agoisdataat: fix coverity issue 851/head
Victor Julien [Wed, 26 Feb 2014 06:19:19 +0000 (07:19 +0100)] 
isdataat: fix coverity issue

During keyword setup there was a path that in theory could lead to
indexing an array with a negative int.

Coverity 400608

11 years agofast-pattern: fix error check in keyword setup
Victor Julien [Wed, 26 Feb 2014 06:14:46 +0000 (07:14 +0100)] 
fast-pattern: fix error check in keyword setup

Check the right variable. Coverity 1038096

11 years agobyte_extract/test/jump: fix coverity issues
Victor Julien [Wed, 26 Feb 2014 05:28:30 +0000 (06:28 +0100)] 
byte_extract/test/jump: fix coverity issues

During keyword setup there was a path that in theory could lead to
indexing an array with a negative int.

Coverity 992695, 400605, 400604

11 years agoMinor cleanups
Victor Julien [Wed, 26 Feb 2014 05:49:45 +0000 (06:49 +0100)] 
Minor cleanups

Remove useless checks: coverity 103813010381311038132
Small other fixes: coverity 1164817

11 years agohtp: fix pointer check logic
Victor Julien [Wed, 26 Feb 2014 06:01:09 +0000 (07:01 +0100)] 
htp: fix pointer check logic

Don't check pointer after it has already been used.

Coverity 1047545

11 years agorule reload: fix unitialized memory access on error
Victor Julien [Wed, 26 Feb 2014 05:41:10 +0000 (06:41 +0100)] 
rule reload: fix unitialized memory access on error

Coverity 709220

11 years agooutput-json: fix minor memory leak on error
Victor Julien [Wed, 26 Feb 2014 05:20:19 +0000 (06:20 +0100)] 
output-json: fix minor memory leak on error

If the json file couldn't be opened, a minor memory leak would occur.

Coverity 1166039

11 years agoftp: fix memory leak 850/head
Victor Julien [Tue, 25 Feb 2014 21:52:18 +0000 (22:52 +0100)] 
ftp: fix memory leak

db pointers in both directions were not freed. This patch frees them
in the state free function.

Bug #1090

11 years agotls: fix uninitialized var use
Victor Julien [Tue, 25 Feb 2014 21:45:46 +0000 (22:45 +0100)] 
tls: fix uninitialized var use

errcode wasn't initialized and in some code paths it remained
uninitialized, leading to us evaluating this uninitialized value.

Bug #1091

11 years agosmtp: don't read uninitialized value
Victor Julien [Tue, 25 Feb 2014 21:40:46 +0000 (22:40 +0100)] 
smtp: don't read uninitialized value

If a reply would be seen before a command, a read of a uninitialized
value could happen.

This patch adds a check for this.

Bug #1089.

11 years agohtp: don't assume HTPCallbackRequestLine is the first callback 849/head
Victor Julien [Tue, 25 Feb 2014 19:22:55 +0000 (20:22 +0100)] 
htp: don't assume HTPCallbackRequestLine is the first callback

By assuming that HTPCallbackRequestLine would always be run first,
an memory leak was introduced. It would not check if user data already
existed in the tx, causing it to overwrite the user data pointer is
it already existed.

Bug #1092.

11 years agoconfigure: fix typo in libjansson warning message
Victor Julien [Mon, 17 Feb 2014 09:56:13 +0000 (10:56 +0100)] 
configure: fix typo in libjansson warning message

11 years agopcap/afpacket: update counters at exit
Victor Julien [Mon, 17 Feb 2014 09:51:12 +0000 (10:51 +0100)] 
pcap/afpacket: update counters at exit

In really short Suricata runtimes the capture counters would not
be updated. This patch does a force update at the end of the
capture loops in pcap and af-packet.

11 years agoMake sure tls-events is part of the dist
Victor Julien [Mon, 17 Feb 2014 09:48:10 +0000 (10:48 +0100)] 
Make sure tls-events is part of the dist

Added it to Makefile.am so it will be part of the dist created by
make distcheck.

11 years agodns: if no (valid) config is found, use defaults 841/head
Victor Julien [Thu, 13 Feb 2014 14:53:08 +0000 (15:53 +0100)] 
dns: if no (valid) config is found, use defaults

This patch will set up probing parsers if no (valid) config is
found.

Add a warning in those cases.

11 years agoapp-layer: tell pp registrar if config was found
Victor Julien [Thu, 13 Feb 2014 14:48:35 +0000 (15:48 +0100)] 
app-layer: tell pp registrar if config was found

The probing parser registration function
AppLayerProtoDetectPPParseConfPorts was a void, meaning it would
give no feedback to the registering protocol implementation. If a
config was missing, it would just give up.

This patch changes it to return a bool. 0 if no config was found,
1 if a config was found.

This allows the caller to setup a default case.

11 years agodns yaml: fix detect ports of tcp relying on udp
Victor Julien [Thu, 13 Feb 2014 14:15:53 +0000 (15:15 +0100)] 
dns yaml: fix detect ports of tcp relying on udp

The probing parser detection ports yaml settings of the TCP part
of the DNS parser accidentally used udp as protocol string, causing
the wrong part of the YAML to be evaluated.

11 years agoapp-layer-event: make error reporting more clear
Victor Julien [Thu, 13 Feb 2014 14:02:57 +0000 (15:02 +0100)] 
app-layer-event: make error reporting more clear

If the protocol is disabled, app-layer-event would print a cryptic
error message. This patch makes sure we inform the user the protocol
is in fact disabled.

11 years agodns: fix message of decoder rule 2240008
Victor Julien [Thu, 13 Feb 2014 13:41:54 +0000 (14:41 +0100)] 
dns: fix message of decoder rule 2240008

The message now reflects that the rule matches on:
    app-layer-event:dns.state_memcap_reached;

11 years agoyaml: add and comment missing dns settings
Victor Julien [Thu, 13 Feb 2014 13:36:45 +0000 (14:36 +0100)] 
yaml: add and comment missing dns settings

DNS memcap settings "global-memcap" and "state-memcap" were missing.

Additionally, add request-flood setting.

11 years agoUpdate Changelog for 2.0rc1 release suricata-2.0rc1
Victor Julien [Thu, 13 Feb 2014 10:14:40 +0000 (11:14 +0100)] 
Update Changelog for 2.0rc1 release

11 years agovlan/QinQ: add vlan_qinq counter 840/head
Victor Julien [Tue, 11 Feb 2014 08:44:26 +0000 (09:44 +0100)] 
vlan/QinQ: add vlan_qinq counter

This patch introduces a new counter "decoder.vlan_qinq". It counts
packets that have more than two stacked vlan layers.

Packets with 2 vlan layers will both increment "decoder.vlan" and
"decoder.vlan_qinq".

11 years agoeve-log: add warning if enabled but not supported
Victor Julien [Tue, 11 Feb 2014 06:44:42 +0000 (07:44 +0100)] 
eve-log: add warning if enabled but not supported

If we're not compiled against libjansson, the eve-log output is not
available. This patch adds a warning.

11 years agoPromote nodes set with --set to sequence nodes as needed. 839/head
Jason Ish [Mon, 10 Feb 2014 20:47:43 +0000 (14:47 -0600)] 
Promote nodes set with --set to sequence nodes as needed.

A node isn't known to be a sequence node until the YAML is parsed.
If a node sequence node was set on the command line, promote
it to a sequence node when it is discovered by YAML to be
a sequence node.

Fixes comment #18 in issue 921.

11 years agovlan: support QinQ ethernet types 838/head
Victor Julien [Mon, 10 Feb 2014 10:13:11 +0000 (11:13 +0100)] 
vlan: support QinQ ethernet types

Add support for 802.1AD and 802.1QinQ in ethernet and vlan parsing.

Tickets: #814, #1103, #1104

11 years agodefrag: fix reassembly with vlan
Victor Julien [Mon, 10 Feb 2014 09:57:46 +0000 (10:57 +0100)] 
defrag: fix reassembly with vlan

When creating a pseudo packet with the reassembled IP packet, the
parent's vlan id or id's are also needed. The defrag packet is run
through decode and the flow engine, where the vlan id is necessary
for connecting the packet to the correct flow.

11 years agoaf-packet: declare TP_STATUS_VLAN_VALID if needed
Eric Leblond [Sat, 8 Feb 2014 21:01:13 +0000 (22:01 +0100)] 
af-packet: declare TP_STATUS_VLAN_VALID if needed

Some old distribution don't ship recent enough linux header. This
result in TP_STATUS_VLAN_VALID being undefined. This patch defines
the constant and use it as it is used in backward compatible method
in the code: the flag is not set by kernel and a test on vci value
will be made.

This should fix https://redmine.openinfosecfoundation.org/issues/1106

11 years agoBug 1107: decoders: bail out on pseudo packets
Victor Julien [Sat, 8 Feb 2014 16:39:16 +0000 (17:39 +0100)] 
Bug 1107: decoders: bail out on pseudo packets

Flow-timeout code injects pseudo packets into the decoders, leading
to various issues. For a full explanation, see:
  https://redmine.openinfosecfoundation.org/issues/1107

This patch works around the issues with a hack. It adds a check to
each of the decoder entry points to bail out as soon as a pseudo
packet from the flow timeout is encountered.

Ticket #1107.

11 years agoFlow: fix flow reference cnt issues
Victor Julien [Sat, 8 Feb 2014 16:09:10 +0000 (17:09 +0100)] 
Flow: fix flow reference cnt issues

FlowReference stores the flow in the destination pointer and increases
the flow reference counter (use_cnt). This should only be called once
per destination pointer. The reference counter is decremented when
FlowDereference is called. Multiple FlowReference calls would lead to
multiple use_cnt bumps, while there would be only one FlowRereference.
This lead to a use_cnt that would never become 0, meaning the flow
would stay in the hash for the entire lifetime of the process.

The fix here is to check if the destination pointer is already set to
the flow. If so, we don't increase the reference counter.

As this is really a bug, this condition will lead to a BUG_ON if the
DEBUG_VALIDATION checking is enabled.

11 years agoipv4 decoder: set 'invalid' event on icmpv6
Victor Julien [Sat, 8 Feb 2014 10:25:13 +0000 (11:25 +0100)] 
ipv4 decoder: set 'invalid' event on icmpv6

ICMPv6 on IPv4 is invalid, so if we encounter this we set an event
and flag the packet as invalid.

Ticket #1105.

11 years agodebug-validation: fix packet check
Victor Julien [Sat, 8 Feb 2014 09:35:47 +0000 (10:35 +0100)] 
debug-validation: fix packet check

On fragments and invalid packets we can have p->proto set, while the
matching protocol header pointer is null.

11 years agodetect ip-only: update radix usage 835/head
Victor Julien [Fri, 20 Dec 2013 13:38:22 +0000 (14:38 +0100)] 
detect ip-only: update radix usage

Update IP-only lookups to the changed radix API.

The return of user_data is treated as a succesful lookup, instead of
the node.

11 years agohost-os-info: update radix lookups
Victor Julien [Fri, 20 Dec 2013 13:37:10 +0000 (14:37 +0100)] 
host-os-info: update radix lookups

Update host OS lookups to use the new API.

The return of user_data is treated as a succesful lookup, instead of
the node.

11 years agounused reputation: radix update
Victor Julien [Fri, 20 Dec 2013 13:36:14 +0000 (14:36 +0100)] 
unused reputation: radix update

Update the unused reputation code to compile after radix update.

11 years agodefrag: update radix usage
Victor Julien [Fri, 20 Dec 2013 13:34:48 +0000 (14:34 +0100)] 
defrag: update radix usage

Update defrag timeout lookup to use the updated radix API.

The return of user_data is treated as a succesful lookup, instead of
the node.

11 years agoradix: update HTP config lookup logic
Victor Julien [Fri, 20 Dec 2013 13:32:33 +0000 (14:32 +0100)] 
radix: update HTP config lookup logic

The HTP config tree is a radix. The lookups are updated to the new API.
The return of user_data is treated as a succesful lookup, instead of
the node itself.

11 years agoradix: update tests after API change
Victor Julien [Fri, 20 Dec 2013 13:29:13 +0000 (14:29 +0100)] 
radix: update tests after API change

This patch updates all the radix tests to the new API. In most cases
it just passes a NULL user data return pointer.

It also removes the tests related to SC_RADIX_NODE_USERDATA, as this
macro is removed.

Bug #1073

11 years agoradix: don't modify node prefix on lookup
Victor Julien [Fri, 20 Dec 2013 13:19:23 +0000 (14:19 +0100)] 
radix: don't modify node prefix on lookup

The radix tree stores user data. However, it had no function to return
this data to the consumers of the API. Instead, on lookup, it would
set a field "user_data_result" in the nodes prefix structure which
could then be read by the caller.

Apart for this not being a very nice design as it exposes API internals
to the caller, it is not thread safe. By updating the global data
structure without any form (or suggestion) of locking, threads could
overwrite the same field unexpectedly.

This patch modifies the lookup logic to get rid of this stored
user_data_result. Instead, all the lookup functions how take an
addition argument: void **user_data_result.

Through this pointer the user data is returned. It's allowed to be
NULL, in this case the user data is ignored.

This is a significant API change, that affects a lot of tests and
callers. These will be updated in follow up patches.

Bug #1073.

11 years agoDon't alert on valid ICMP6 solicit/advert messages.
Jason Ish [Wed, 5 Feb 2014 23:27:42 +0000 (17:27 -0600)] 
Don't alert on valid ICMP6 solicit/advert messages.

Handles ND_ROUTER_SOLICIT, ND_ROUTER_ADVERT, ND_NEIGHBOUR_ADMIN,
ND_NEIGHBOUR_SOLICIT and ND_REDIRECT.  Don't set ICMPV6_UNKONWN_CODE
if code is the expected value of 0.

11 years agoRemove extra ] configure.ac for HAVE_DETECT_DISABLED
Ken Steele [Thu, 6 Feb 2014 18:23:43 +0000 (13:23 -0500)] 
Remove extra ] configure.ac for HAVE_DETECT_DISABLED

Saw a warning about unknow command ']' running distcheck and tracked it back
to this error.

11 years agoFix CUDA test warning.
Victor Julien [Fri, 7 Feb 2014 14:06:43 +0000 (15:06 +0100)] 
Fix CUDA test warning.

11 years agoCUDA: Fix header file resolution issues.
Anoop Saldanha [Wed, 5 Feb 2014 03:17:45 +0000 (08:47 +0530)] 
CUDA: Fix header file resolution issues.

11 years agoaf-packet: no VLAN id from msg header for old kernel 833/head
Eric Leblond [Fri, 7 Feb 2014 10:13:38 +0000 (11:13 +0100)] 
af-packet: no VLAN id from msg header for old kernel

This patch uses the new function SCKernelVersionIsAtLeast to know
that we've got a old kernel that do not strip the VLAN header from
the message before sending it to userspace.

11 years agoAdd new function to work on kernel version.
Eric Leblond [Fri, 7 Feb 2014 10:11:14 +0000 (11:11 +0100)] 
Add new function to work on kernel version.

This patch adds a new file containing a function that can be used
to compare the version number of the running kernel with a specific
version.

11 years agoaf-packet: improve VLAN detection
Eric Leblond [Thu, 6 Feb 2014 12:54:10 +0000 (13:54 +0100)] 
af-packet: improve VLAN detection

Since commit in kernel
  commit a3bcc23e890a6d49d6763d9eb073d711de2e0469
  Author: Ben Greear <greearb@candelatech.com>
  Date:   Wed Jun 1 06:49:10 2011 +0000

      af-packet: Add flag to distinguish VID 0 from no-vlan.
a flag is set to indicate VLAN has been set in packet header.

As suggested in commit message, using a test of the flag followed
by a check on vci value ensure backward compatibility of the test.

11 years agoaf-packet: handle vlan counter
Eric Leblond [Tue, 4 Feb 2014 10:49:42 +0000 (11:49 +0100)] 
af-packet: handle vlan counter

This patch adds a vlan counter increment in decodeAFP. This
is needed to take into account vlan_id set by the packet
reading function.

11 years agoaf-packet: get vlan id from header
Eric Leblond [Thu, 30 Jan 2014 17:11:10 +0000 (18:11 +0100)] 
af-packet: get vlan id from header

Since kernel 3.8, the VLAN header are stripped from packet. So the
first VLAN id can only be fetched from the tpacket header at capture
time.

11 years agoapp-layer: fix AppLayerParserProtocolIsTxEventAware 831/head
Victor Julien [Fri, 7 Feb 2014 10:04:32 +0000 (11:04 +0100)] 
app-layer: fix AppLayerParserProtocolIsTxEventAware

AppLayerParserProtocolIsTxEventAware would check if a proto is tx
event aware by checking if it had registered a StateHasEvents function.
However, this is an optimization function. This patch changes it to
use the StateGetEvents function instead, which is a better indicator.

11 years agohttp: per tx decoder events
Victor Julien [Fri, 7 Feb 2014 10:02:41 +0000 (11:02 +0100)] 
http: per tx decoder events

Store HTTP decoder events per TX, so they can be inspected per TX.

Ticket: #839.

11 years agodns: fix protocol yaml setting
Victor Julien [Thu, 6 Feb 2014 17:30:33 +0000 (18:30 +0100)] 
dns: fix protocol yaml setting

UDP code would accidentally depend on 'tcp' setting.

11 years agoAdd option on Tile-Gx for logging for fast.log alerts over PCIe 822/head 824/head
Ken Steele [Tue, 7 Jan 2014 17:56:07 +0000 (12:56 -0500)] 
Add option on Tile-Gx for logging for fast.log alerts over PCIe

When running on a TILEncore-Gx PCIe card, setting the filetype of fast.log
to pcie, will open a connection over PCIe to a host application caleld
tile-pcie-logd, that receives the alert strings and writes them to a file
on the host. The file name to open is also passed over the PCIe link.

This allows running Suricata on the TILEncore-Gx PCIe card, but have the
alerts logged to the host system's file system efficiently. The PCIe API that
is used is the Tilera Packet Queue (PQ) API which can access PCIe from User
Space, thus avoiding system calls.

Created util-logopenfile-tile.c and util-logopen-tile.h for the TILE
specific PCIe logging functionality.

Using Write() and Close() function pointers in LogFileCtx, which
default to standard write and close for files and sockets, but are
changed to PCIe write and close functions when a PCIe channel is
openned for logging.

Moved Logging contex out of tm-modules.h into util-logopenfile.h,
where it makes more sense. This required including util-logopenfile.h
into a couple of alert-*.c files, which previously were getting the
definitions from tm-modules.h.

The source and Makefile for tile-pcie-logd are added in contrib/tile-pcie-logd.

By default, the file name for fast.log specified in suricata.yaml is used as
the filename on the host. An optional argument to tile-pcie-logd, --prefix=,
can be added to prepend the supplied file path. For example, is the file
in suricata.yaml is specified as "/var/log/fast.log" and --prefix="/tmp",
then the file will be written to "/tmp/var/log/fast.log".

Check for TILERA_ROOT environment variable before building tile_pcie_logd

Building tile_pcie_logd on x86 requires the Tilera MDE for its PCIe libraries
and API header files. Configure now checs for TILERA_ROOT before enabling
builing tile_pcie_logd in contrib/tile_pcie_logd

11 years agoReduce time the file lock is held to write an alert to Fast.log
Ken Steele [Tue, 7 Jan 2014 15:31:40 +0000 (10:31 -0500)] 
Reduce time the file lock is held to write an alert to Fast.log

Generate the alert string into a temporary buffer before aquiring the
file lock. Only hold the file lock while writing the alert string to the
file.

In the case of multiple alerts, it would be better to generate all the
alerts, then aquire the lock once and write them all and then flush.

Changed PrintRawLineHexFp, which printed to a file, to PrintBufferRawLineHex,
that puts the same output into a string buffer. It was only used by fast.log.

11 years agoAlert file formatting clean up.
Ken Steele [Mon, 6 Jan 2014 17:00:57 +0000 (12:00 -0500)] 
Alert file formatting clean up.

Put { on new line for function declarations. Remove space after function
name.

Add static to unit tests delcaration.

11 years agoFix address parsing issues 823/head
Victor Julien [Thu, 6 Feb 2014 08:38:58 +0000 (09:38 +0100)] 
Fix address parsing issues

Fix issue where negating a range containing a negation would fail.

E.g. HOME_NET: [192.168.0.0/16,!192.168.10.0], can be used in a rule
     as !$HOME_NET.

Also, fix another parsing issue:

If the negation range would be bigger than the 'positive' range, parsing
wouldn't be correct. Now this case is rejected.

E.g. [192.168.1.3,!192.168.0.0/16] is now explicitly rejected

Ticket 1079.

11 years agoprofiling: end profiling tunnel packets inside lock 820/head
Victor Julien [Tue, 4 Feb 2014 17:18:46 +0000 (18:18 +0100)] 
profiling: end profiling tunnel packets inside lock

End profiling inside the lock for a tunnel packet as otherwise another
thread may already free the packet while the profiling code runs.

SEGV's observed and now gone.

11 years agofileext: make case insensitive
Victor Julien [Tue, 4 Feb 2014 16:26:39 +0000 (17:26 +0100)] 
fileext: make case insensitive

Change keyword to be case insensitive when matching.

Ticket #597.

11 years agoWhen setting a sequence value, check for an existing node. 818/head
Jason Ish [Tue, 10 Dec 2013 18:09:40 +0000 (12:09 -0600)] 
When setting a sequence value, check for an existing node.

This makes --set af-packet.0.threads=X do what you expect by
looking for the sequence node before setting.

11 years agoAdd a --set command line option to set/override a configuration value.
Jason Ish [Wed, 4 Dec 2013 06:00:07 +0000 (00:00 -0600)] 
Add a --set command line option to set/override a configuration value.

11 years agojson dns: fix tx logic
Victor Julien [Tue, 4 Feb 2014 13:07:10 +0000 (14:07 +0100)] 
json dns: fix tx logic

The JSON DNS logger would still have some conditions in the main
Logger function. This led to some transactions not beeing logged.

11 years agoprofiling: output log api modules separately
Victor Julien [Tue, 4 Feb 2014 11:53:00 +0000 (12:53 +0100)] 
profiling: output log api modules separately

Skip log api thread modules in the regular 'thread modules' list,
instead print them in a separate list.

11 years agoprofiling: fix percentage of detect phases
Victor Julien [Tue, 4 Feb 2014 11:52:07 +0000 (12:52 +0100)] 
profiling: fix percentage of detect phases

Use proper 'total' to calculate weigth of each detection phase.

11 years agothreading: add missing json types to TmModuleTmmIdToString
Victor Julien [Tue, 4 Feb 2014 11:15:04 +0000 (12:15 +0100)] 
threading: add missing json types to TmModuleTmmIdToString

Also, remove 'default' case from switch statement, so missing entries
will lead to a compiler warning.

11 years agooutput: add TM_FLAG_LOGAPI_TM thread module flag
Victor Julien [Tue, 4 Feb 2014 10:49:20 +0000 (11:49 +0100)] 
output: add TM_FLAG_LOGAPI_TM thread module flag

The TM_FLAG_LOGAPI_TM flag indicates that a module is run by the log
api, not by the 'regular' thread module call functions.

Set flag in all all Log API users' registration code.

Purpose of this flag is in profiling. In profiling output it will be
used to list log api thread modules separately.

11 years agoprofiling: support log api
Victor Julien [Tue, 4 Feb 2014 10:34:21 +0000 (11:34 +0100)] 
profiling: support log api

The log API calls thread modules directly, so the TMM profiling logic
can be applied to it. This patch does so.

The "Thread Module" out now again lists the individual loggers. As the
module are normally called much less frequently the numbers are hard to
compare to pre-log-api numbers.

11 years agothreading: add utility to get module id from name
Victor Julien [Tue, 4 Feb 2014 10:31:02 +0000 (11:31 +0100)] 
threading: add utility to get module id from name

Add TmModuleGetIdByName to go from module name to id directly.

11 years agoprofiling: add sample-rate yaml option
Victor Julien [Mon, 3 Feb 2014 16:40:45 +0000 (17:40 +0100)] 
profiling: add sample-rate yaml option

Add option "profiling.sample-rate":

  # Run profiling for every xth packet. The default is 1, which means we
  # profile every packet. If set to 1000, one packet is profiled for every
  # 1000 received.
  #sample-rate: 1000

This allows for configuration of the sample rate.

11 years agoprofiling: conditional rule profiling
Victor Julien [Sat, 1 Feb 2014 14:58:58 +0000 (15:58 +0100)] 
profiling: conditional rule profiling

Add support for conditional rule profiling. Currently only simple
rate limiting is supported, but hardcoded to inspecting rules for
each packet.

11 years agoprofiling: lower overhead when disabled
Victor Julien [Sat, 1 Feb 2014 11:57:01 +0000 (12:57 +0100)] 
profiling: lower overhead when disabled

Instead of a large (6k+) structure in the Packet, make the profiling
storage dynamic. To do this the Packet->profile is now a pointer.

Initial support for selective sampling, e.g. only profile every
1000th packet.

11 years agotls: fix negated match
Eric Leblond [Tue, 28 Jan 2014 15:54:51 +0000 (16:54 +0100)] 
tls: fix negated match

A negated match is matching if the tested field is NULL. But as it
is not set, nor negated nor normal test must match.

Without this patch, a rule like:
 alert tls any any -> any any (msg:"negated match"; tls.subject:!"CN=home.regit.org"; sid:1; rev:1;)
is alerting for all connections. Event if they are done on a certificate
with matching subject. This was due to the fact that tls protocol
is discovered before the handshake is complete. Thus the condition
on tls is true with a NULL tls.subject. And code was returning a
positive match in the case of a NULL subject and a signature with
a negated match.

11 years agoUpdated banned function cocci check
Victor Julien [Fri, 31 Jan 2014 11:53:26 +0000 (12:53 +0100)] 
Updated banned function cocci check

Added: strndup and strchrnul

Both are not supported on OS X 10.6. It's rather old, but it's the
only Mac QA box I have, so for now it'll have to do.

11 years agoReplace strchrnul with strchr
Victor Julien [Fri, 31 Jan 2014 11:52:36 +0000 (12:52 +0100)] 
Replace strchrnul with strchr

And add a null check then of course. strchrnul isn't supported on
all platforms.

11 years agoRemove SCStrndup
Victor Julien [Fri, 31 Jan 2014 11:25:16 +0000 (12:25 +0100)] 
Remove SCStrndup

Removed strndup wrapper as it's not available in all plaforms.