<div dir="ltr"><div>Hi All,</div><div><br></div><div>   In reviewing code in Snort-2.9.7.0-alpha, I found some instances</div><div>where the library call to stat() was used, but without a check of</div><div>the return value being < 0, which would indicate failure.  The</div>
<div>patch file is below:</div><div><br></div><div>--- util.c.orig 2014-03-13 09:17:43.801561939 -0700</div><div>+++ util.c      2014-03-13 09:26:56.257776283 -0700</div><div>@@ -788,14 +788,16 @@</div><div>                        "system\n", _PATH_VARRUN);</div>
<div> #endif  /* _PATH_VARRUN */</div><div> </div><div>-            stat(_PATH_VARRUN, &pt);</div><div>+            if (stat(_PATH_VARRUN, &pt) == -1)</div><div>+               LogMessage("WARNING: Could not stat _PATH_VARRUN...\n");</div>
<div> </div><div>             if(!S_ISDIR(pt.st_mode) || access(_PATH_VARRUN, W_OK) == -1)</div><div>             {</div><div>                 LogMessage("WARNING: _PATH_VARRUN is invalid, trying "</div><div>                            "/var/log/ ...\n");</div>
<div>                 SnortStrncpy(snort_conf->pid_path, "/var/log/", sizeof(snort_conf->pid_path));</div><div>-                stat(snort_conf->pid_path, &pt);</div><div>+                if (stat(snort_conf->pid_path, &pt) == -1)</div>
<div>+                   LogMessage("WARNING: Could not stat %s\n", snort_conf->pid_path);</div><div> </div><div>                 if(!S_ISDIR(pt.st_mode) || access(snort_conf->pid_path, W_OK) == -1)</div><div>
                 {</div><div><span class="" style="white-space:pre">                              </span> </div><div>This patch file just outputs a WARNING via LogMessage, since additional</div><div>checks take care of any path/file issues later on.</div>
<div><br></div><div>In checking /tools/u2openappid, file 'u2openappid.c', I found an instance</div><div>where fseek() was called with no check for a return value of -1, indicating</div><div>failure.  The patch file below adds a simple warning message:</div>
<div><br></div><div>--- u2openappid.c.orig  2014-03-13 09:47:59.775362871 -0700</div><div>+++ u2openappid.c       2014-03-13 09:49:50.465431009 -0700</div><div>@@ -173,7 +173,10 @@</div><div> </div><div>     if ( s_off )</div>
<div>     {</div><div>-        fseek(it->file, s_pos+s_off, SEEK_SET);</div><div>+        if (fseek(it->file, s_pos+s_off, SEEK_SET) == -1) {</div><div>+           puts("Unable to SEEK on current file .. and this is not being handled yet.");</div>
<div>+           return FAILURE;</div><div>+       }</div><div>         s_off = 0;</div><div>     }</div><div> </div><div>In checking /tools/u2spewfoo, file 'u2spewfoo.c', I found an instance</div><div>where fseek() was called with no check for a return value of -1, indicating</div>
<div>failure.  The patch file below adds a simple warning message:</div><div><br></div><div>--- u2spewfoo.c.orig    2014-03-13 09:55:39.834834064 -0700</div><div>+++ u2spewfoo.c 2014-03-13 09:56:37.657182987 -0700</div><div>
@@ -174,7 +174,10 @@</div><div> </div><div>     if ( s_off )</div><div>     {</div><div>-        fseek(it->file, s_pos+s_off, SEEK_SET);</div><div>+        if (fseek(it->file, s_pos+s_off, SEEK_SET) == -1) {</div><div>
+           puts("Unable to SEEK on current file .. and this is not being handled yet.");</div><div>+           return FAILURE;</div><div>+       }</div><div>         s_off = 0;</div><div>     }</div><div><br></div>
<div>In directory 'tools/file_server', file 'file_server.c', I found an</div><div>instance where listen() is called without a check of the return</div><div>value being < 0, which would indicate failure.  The patch file</div>
<div>below adds the check and a error message:</div><div><br></div><div>--- file_server.c.orig  2014-03-13 10:06:37.844463704 -0700</div><div>+++ file_server.c       2014-03-13 10:07:44.643953576 -0700</div><div>@@ -615,7 +615,12 @@</div>
<div>     //listen marks the socket as passive socket listening to incoming connections,</div><div>     //it allows max 5 backlog connections: backlog connections are pending in queue</div><div>     //if pending connections are more than 5, later request may be ignored</div>
<div>-    listen(sockfd,5);</div><div>+</div><div>+    if (listen(sockfd,5) < 0)</div><div>+    {</div><div>+       ErrorMessage("ERROR on listen.\n");</div><div>+       exit(1);</div><div>+    }</div><div> </div>
<div>     while (!stop_processing)</div><div>     {</div><div><span class="" style="white-space:pre">   </span> </div><div>A 'make' results in a clean compile of the above patch files :)</div><div><br></div><div>I am attaching the patch file(s) to this email.</div>
<div><br></div><div>Bill Parker (wp02855 at gmail dot com)</div><div><br></div><div>m000000000000000000000000000000!</div></div>