<div dir="rtl"><div dir="ltr"><div dir="ltr">I found a way to solve the bug, with call to TagCacheReset function before calling to FreeRuleLists.</div><div dir="ltr"><br></div><div dir="ltr">TagCacheReset will free the pointers to old output plugins, so we lost tagged session/host, but got reload works again.</div>
<div><br></div></div><div dir="ltr"><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">Netanel</span></div></div><div class="gmail_extra"><div dir="ltr"><br><br><div class="gmail_quote">2014-08-17 21:58 GMT+03:00 Netanel Maman <span dir="ltr"><<a href="mailto:netanelmaman0@...2499..." target="_blank">netanelmaman0@...2499...</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 .8ex;border-left:1px #ccc solid;border-right:1px #ccc solid;padding-left:1ex;padding-right:1ex"><div dir="rtl"><div dir="ltr">Hey,</div><div dir="ltr"><br></div><div dir="ltr">
After dipping into source code, i found a logical bug. </div><div dir="ltr"><br></div><div dir="ltr"><b>Logical flow:</b></div><div dir="ltr">
I have rule on tcp port 80 content with session tag for 30 seconds.</div><div dir="ltr"><br></div><div dir="ltr">1. Matching rule with session tag </div><div dir="ltr">2. Alerting</div><div dir="ltr">3. Reload configuration<br>

</div><div dir="ltr">4. Matching the rest session</div><div dir="ltr">5. Alerting -- CRASH</div><div dir="ltr"><br></div><div dir="ltr">The reason is that tag store sessions with pointer to output lists.</div><div dir="ltr">

When reload happen we free that output lists.</div><div dir="ltr"><br></div><div dir="ltr"><b>Code flow:</b></div><div dir="ltr">The free occur in these files and func: </div><div dir="ltr">snort.c</div><div dir="ltr">  SnortConfFree(SnortConfig *sc)</div>

<div dir="ltr">parser.c<br></div><div dir="ltr"><div dir="ltr">  FreeRuleLists(sc);<br></div><div dir="ltr">  <b>FreeOutputLists(&sc->Alert);</b> etc..<br></div><div dir="ltr"><br></div><div>After that, when CheckTagging(Packet *p) called in detect.c we got right session to alert for but with garbage pointer to non exists output plugin.</div>

<div><br></div><div>So in CallLogFuncs() we iterate over output list, and crash when call</div><div>idx->func(p, message, idx->arg, event) because this function doesn't exist anymore.<br></div><div><br></div><div>

Any ideas how to solve it?</div><div><br></div><div>Netanel </div></div><div class="gmail_extra"><br><br><div class="gmail_quote"><div dir="ltr">2014-06-01 15:29 GMT+03:00 Netanel Maman <span dir="ltr"><<a href="mailto:netanelmaman0@...2499..." target="_blank">netanelmaman0@...3066...99...</a>></span>:</div>
<div><div class="h5">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr"><br>
program received signal SIGSEGV, Segmentation fault. x0000000000000030 in ?? ()<br>
(gdb) where 0 0x0000000000000030 in ?? () </p>
<p dir="ltr">1 0x0000000000447e06 in CallLogFuncs (p=Oxee9680, message=0x545f20 "Tagged Packet", head=ex16a1530, event=0x7fffffffdccO) at detect.c:373 </p>
<p dir="ltr">2 0x0000000000447d1c in CheckTagging (p=0xee9688) at detect.c:341 </p>
<p dir="ltr">3 0x0000000000447a44 in Preprocess (p=Oxee9688) at detect.c:267 </p>
<p dir="ltr">4 0x00000000004395e4 in ProcessPacket (p=0xee9680, pkthdr=0x7fffffffe160, pkt=0x7fffbf300840 "lI", ft=0x0) at snort.c:1867 </p>
<p dir="ltr">5 0x0000000000439117 in PacketCallback (user=0x0, pkthdr=0x7fffffffe168, pkt=0x7fffbf300840 "lI") at snort.c:1704 •</p>
<p dir="ltr">6 Ox00007fffbfd6e05e in pfring_daq_acquire (handle=0x18c51d0, cnt=0, callback=<value optimized out>, metaback=<value optimized out>, user=0x0) at daq_pfring_dna.c:681 </p>
<p dir="ltr">7 Ox000000000045fe39 in DAQ Acquire (max=0, callback=0x438f7e <PacketCallback>, user=0x0) at sfdaq.c:540 </p>
<p dir="ltr">8 0x000000000043bd76 in Pac1etLoop () at snort.c:3210 •</p>
<p dir="ltr">9 Ox0000000000437f73 in SnortMain (argc=17, argv=0x7fffffffe398) at snort.c:907 </p>
<p dir="ltr">10 Ox0000000000437da5 in main (argc=17, argv=0x7fffffffe398) at snort.c:807</p><div><div>
<div class="gmail_quote">On May 29, 2014 8:44 PM, "Carter Waxman (cwaxman)" <<a href="mailto:cwaxman@...3461..." target="_blank">cwaxman@...3461...</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">






<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px;font-family:Calibri,sans-serif">
<div>Hello,</div>
<div><br>
</div>
<div>Could you please attach a backtrace from gdb?</div>
<div><br>
</div>
<div>Thanks,</div>
<div>Carter</div>
<div><br>
</div>
<span>
<div style="font-family:Calibri;font-size:11pt;text-align:left;color:black;BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;PADDING-BOTTOM:0in;PADDING-LEFT:0in;PADDING-RIGHT:0in;BORDER-TOP:#b5c4df 1pt solid;BORDER-RIGHT:medium none;PADDING-TOP:3pt">



<span style="font-weight:bold">From: </span>נתנאל ממן <<a href="mailto:netanelmaman0@...2499..." target="_blank">netanelmaman0@...2499...</a>><br>
<span style="font-weight:bold">Date: </span>Thursday, May 29, 2014 12:29 PM<br>
<span style="font-weight:bold">To: </span>"<a href="mailto:snort-devel@lists.sourceforge.net" target="_blank">snort-devel@...362....net</a>" <<a href="mailto:snort-devel@lists.sourceforge.net" target="_blank">snort-devel@lists.sourceforge.net</a>><br>



<span style="font-weight:bold">Subject: </span>[Snort-devel] Snort crash when reload rules with tag session<br>
</div>
<div><br>
</div>
<div>
<div>
<p dir="ltr">Hello guys, please help me solve a stranger bug.</p>
<p dir="ltr">I have rules with tag session option.<br>
When I'm reload conf via control socket the conf reload succesfully but crash one second after.<br>
When i reload the same rule without tag option, snort reload successfully.<br>
I think that snort free some important struct of tags, but i dont find which and where.</p>
<p dir="ltr">The version of Snort you're running: <br>
2.9.6.1</p>
<p dir="ltr">Information on the rules you have enabled:<br>
General local rule with "tag:session,100,seconds;"</p>
<p dir="ltr">How Snort was built:<br>
configure --enable-control-socket<br>
make</p>
<p dir="ltr">Did you build from source: <br>
Yes</p>
<p dir="ltr">Platform information: <br>
Centos 6.3 x86_64, kernel 2.6.32, intel 86</p>
<p dir="ltr">Any output that may be helpful:<br>
gdb show that crash occur when call to log function after check tagging func in decode.c . Im faild to understand why.</p>
<p dir="ltr">Thanks about your amazing work,</p>
<p dir="ltr">net</p>
</div>
</div>
</span>
</div>

</blockquote></div>
</div></div></blockquote></div></div></div><br></div></div>
</blockquote></div></div></div>