Browse Source

We were leaking a file descriptor if Tor started with a zero-length
cached-descriptors file. Patch by freddy77; bugfix on 0.1.2.


svn:r13488

Roger Dingledine 16 years ago
parent
commit
740097a65e
2 changed files with 5 additions and 3 deletions
  1. 2 0
      ChangeLog
  2. 3 3
      src/common/compat.c

+ 2 - 0
ChangeLog

@@ -13,6 +13,8 @@ Changes in version 0.2.0.20-?? - 2008-02-??
     - Directory mirrors no longer include a guess at the client's IP
       address if the connection appears to be coming from the same /24
       network; it was producing too many wrong guesses.
+    - We were leaking a file descriptor if Tor started with a zero-length
+      cached-descriptors file. Patch by freddy77; bugfix on 0.1.2.
 
 
 Changes in version 0.2.0.19-alpha - 2008-02-09

+ 3 - 3
src/common/compat.c

@@ -129,6 +129,7 @@ typedef struct tor_mmap_impl_t {
   size_t mapping_size; /**< Size of the actual mapping. (This is this file
                         * size, rounded up to the nearest page.) */
 } tor_mmap_impl_t;
+
 /** Try to create a memory mapping for <b>filename</b> and return it.  On
  * failure, return NULL.  Sets errno properly, using ERANGE to mean
  * "empty file". */
@@ -164,21 +165,20 @@ tor_mmap_file(const char *filename)
      * return NULL, and bad things will happen. So just fail. */
     log_info(LD_FS,"File \"%s\" is empty. Ignoring.",filename);
     errno = ERANGE;
+    close(fd);
     return NULL;
   }
 
   string = mmap(0, size, PROT_READ, MAP_PRIVATE, fd, 0);
+  close(fd);
   if (string == MAP_FAILED) {
     int save_errno = errno;
-    close(fd);
     log_warn(LD_FS,"Could not mmap file \"%s\": %s", filename,
              strerror(errno));
     errno = save_errno;
     return NULL;
   }
 
-  close(fd);
-
   res = tor_malloc_zero(sizeof(tor_mmap_impl_t));
   res->base.data = string;
   res->base.size = filesize;