From: Krisztian Kovacs <Kris.Kovacs@morganstanley.com>
authorChristos Zoulas <christos@zoulas.com>
Mon, 23 Nov 2009 16:14:11 +0000 (11:14 -0500)
committerChristos Zoulas <christos@zoulas.com>
Mon, 23 Nov 2009 16:14:11 +0000 (11:14 -0500)
Date: Tue, 29 Jan 2008 17:59:19 +0100
Subject: [PATCH 01/20] Fix filename buffer leak in mtab_linux.c

The temporary filename buffer was leaked in lock_mtab().

ChangeLog
conf/mtab/mtab_linux.c

index 16c561e9ff76d54ecf4689d7e26b044b7425034f..27ade5584ae1a8d25ec284c63d2cd285da9975e0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-11-23  Christos Zoulas <christos@zoulas.com>
+
+       * The temporary filename buffer was leaked in lock_mtab().
+         From: Krisztian Kovacs <Kris.Kovacs@morganstanley.com>
+
 2009-10-27  Christos Zoulas <christos@zoulas.com>
 
        * Deal with errno.h->sys/errno.h better
index e641c7e9b8e3c422af4283b47c9b8193b6756a5d..7736014cd779d44ed4ef195bb02b6d8fe0863b79 100644 (file)
@@ -160,6 +160,7 @@ lock_mtab(void)
   int tries = 100000, i;
   char *linktargetfile;
   size_t l;
+  int rc = 1;
 
   /*
    * Redhat's original code set a signal handler called "handler()" for all
@@ -206,7 +207,8 @@ lock_mtab(void)
       (void) unlink(linktargetfile);
       plog(XLOG_ERROR, "can't link lock file %s: %s ",
           MOUNTED_LOCK, strerror(errsv));
-      return 0;
+      rc = 0;
+      goto error;
     }
 
     lockfile_fd = open(MOUNTED_LOCK, O_WRONLY);
@@ -221,7 +223,8 @@ lock_mtab(void)
       (void) unlink(linktargetfile);
       plog(XLOG_ERROR,"can't open lock file %s: %s ",
           MOUNTED_LOCK, strerror(errsv));
-      return 0;
+      rc = 0;
+      goto error;
     }
 
     flock.l_type = F_WRLCK;
@@ -251,7 +254,8 @@ lock_mtab(void)
        plog(XLOG_ERROR, "can't lock lock file %s: %s",
             MOUNTED_LOCK, (errno == EINTR) ?
             "timed out" : strerror(errsv));
-       return 0;
+       rc = 0;
+       goto error;
       }
       alarm(0);
       /*
@@ -267,11 +271,19 @@ lock_mtab(void)
        plog(XLOG_ERROR,
             "Cannot create link %s; Perhaps there is a stale lock file?",
             MOUNTED_LOCK);
+       rc = 0;
+       goto error;
       }
       close(lockfile_fd);
     }
   }
-  return 1;
+
+error:
+  if (linktargetfile != NULL) {
+    XFREE(linktargetfile);
+  }
+
+  return rc;
 }