util: serverLog using memory after free 59/13659/3
authorCheyenne Wills <cwills@sinenomine.net>
Tue, 25 Jun 2019 16:40:53 +0000 (10:40 -0600)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 5 Jul 2019 09:06:21 +0000 (05:06 -0400)
clang's scan-build detected a "use of memory after it is freed"
condition.

The function OpenLogFile frees the variable ourName before creating a
duplicate of the name passed to it.  However there is a call that uses
ourName as the parameter: OpenLogFile(ourName).  This results in freeing
ourName then doing a strdup of the same memory location.

Test the passed parameter and if it's the same as ourName already skip
the free and strdup.

This bug was introduced in commit
    340ec2f79208ee21c3130c4b1c13995947ce426c
    "util: allocate log filename buffers"

Change-Id: I770008b074e0003c7c1532128f8322da811d6fcc
Reviewed-on: https://gerrit.openafs.org/13659
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>

src/util/serverLog.c

index a250d65..13dbed8 100644 (file)
@@ -575,9 +575,12 @@ OpenLogFile(const char *fileName)
     RedirectStdStreams(fileName);
 
     /* Save our name for reopening. */
-    free(ourName);
-    ourName = strdup(fileName);
-    opr_Assert(ourName != NULL);
+    if (ourName != fileName) {
+       /* Make a copy if needed */
+       free(ourName);
+       ourName = strdup(fileName);
+       opr_Assert(ourName != NULL);
+    }
 
     serverLogFD = tempfd;