From 740097a65ed5c92b3a5a23f0c919b82ea6a59625 Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Wed, 13 Feb 2008 07:23:37 +0000 Subject: [PATCH] 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 --- ChangeLog | 2 ++ src/common/compat.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index fe8ce8d858..02e62c578d 100644 --- a/ChangeLog +++ b/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 diff --git a/src/common/compat.c b/src/common/compat.c index cc8350d4a0..b1b18fa7ab 100644 --- a/src/common/compat.c +++ b/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 filename 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; -- 2.11.4.GIT