]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Fix warnings and 64-bit problems in openbsd-malloc code
authorNick Mathewson <nickm@torproject.org>
Wed, 15 Aug 2012 23:26:53 +0000 (19:26 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 15 Aug 2012 23:26:53 +0000 (19:26 -0400)
The warning fixes are:
  - Only define issetugid if it's missing.
  - Explicitly ignore the return value of writev.
  - Explicitly cast the retval of readlink() to int.

The 64-bit problems are related to just storing a size_t in an int. Not cool!  Use a size_t instead.

Fix for bug 6379. Bugfix on 0.2.0.20-rc, which introduced openbsd-malloc.

changes/bug6379 [new file with mode: 0644]
configure.in
src/common/OpenBSD_malloc_Linux.c

diff --git a/changes/bug6379 b/changes/bug6379
new file mode 100644 (file)
index 0000000..1f2b694
--- /dev/null
@@ -0,0 +1,6 @@
+  o Minor bugfixes:
+    - Fix build warnings from --enable-openbsd-malloc with gcc warnings
+      enabled. Fixes bug 6379.
+    - Fix 64-bit warnings from --enable-openbsd-malloc. Fixes bug 6379.
+      Bugfix on 0.2.0.20-rc.
+
index 1db7d08e20b13d47eb183fd29f7a39f0f0fd53bb..8aa90f6414f2dbdc1387599e0d3b89b7ce61933e 100644 (file)
@@ -300,6 +300,7 @@ AC_CHECK_FUNCS(
         gmtime_r \
         inet_aton \
         ioctl \
+        issetugid \
         localtime_r \
         lround \
         memmem \
index 92ca9c00668bf6060c5aed2ed82203cc06e774cc..39c8f8b762daefe7d86ea6e9d607f209eaa2c250 100644 (file)
  * ----------------------------------------------------------------------------
  */
 
+/* We use this macro to remove some code that we don't actually want,
+ * rather than to fix its warnings. */
+#define BUILDING_FOR_TOR
+
 /*
  * Defining MALLOC_EXTRA_SANITY will enable extra checks which are
  * related to internal conditions and consistency in malloc.c. This has
@@ -79,6 +83,7 @@ static size_t g_alignment = 0;
 
 extern int __libc_enable_secure;
 
+#ifndef HAVE_ISSETUGID
 static int issetugid(void)
 {
        if (__libc_enable_secure) return 1;
@@ -86,8 +91,10 @@ static int issetugid(void)
        if (getgid() != getegid()) return 1;
        return 0;
 }
+#endif
 
 #define PGSHIFT 12
+#undef MADV_FREE
 #define MADV_FREE MADV_DONTNEED
 #include <pthread.h>
 static pthread_mutex_t gen_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -456,7 +463,7 @@ wrterror(const char *p)
        iov[3].iov_len = strlen(p);
        iov[4].iov_base = (char*)"\n";
        iov[4].iov_len = 1;
-       writev(STDERR_FILENO, iov, 5);
+       (void) writev(STDERR_FILENO, iov, 5);
 
        suicide = 1;
 #ifdef MALLOC_STATS
@@ -489,8 +496,8 @@ wrtwarning(const char *p)
        iov[3].iov_len = strlen(p);
        iov[4].iov_base = (char*)"\n";
        iov[4].iov_len = 1;
-       
-       writev(STDERR_FILENO, iov, 5);
+
+       (void) writev(STDERR_FILENO, iov, 5);
 }
 
 #ifdef MALLOC_STATS
@@ -665,7 +672,7 @@ malloc_init(void)
        for (i = 0; i < 3; i++) {
                switch (i) {
                case 0:
-                       j = readlink("/etc/malloc.conf", b, sizeof b - 1);
+                       j = (int) readlink("/etc/malloc.conf", b, sizeof b - 1);
                        if (j <= 0)
                                continue;
                        b[j] = '\0';
@@ -1145,9 +1152,10 @@ malloc_bytes(size_t size)
        if (size == 0)
                j = 0;
        else {
+               size_t ii;
                j = 1;
-               i = size - 1;
-               while (i >>= 1)
+               ii = size - 1;
+               while (ii >>= 1)
                        j++;
        }
 
@@ -1971,6 +1979,7 @@ calloc(size_t num, size_t size)
        return(p);
 }
 
+#ifndef BUILDING_FOR_TOR
 static int ispowerof2 (size_t a) {
        size_t b;
        for (b = 1ULL << (sizeof(size_t)*NBBY - 1); b > 1; b >>= 1)
@@ -1978,7 +1987,9 @@ static int ispowerof2 (size_t a) {
                return 1;
        return 0;
 }
+#endif
 
+#ifndef BUILDING_FOR_TOR
 int posix_memalign(void **memptr, size_t alignment, size_t size)
 {
        void *r;
@@ -2015,18 +2026,20 @@ void *valloc(size_t size)
        posix_memalign(&r, malloc_pagesize, size);
        return r;
 }
+#endif
 
 size_t malloc_good_size(size_t size)
 {
        if (size == 0) {
                return 1;
        } else if (size <= malloc_maxsize) {
-               int i, j;
+               int j;
+               size_t ii;
                /* round up to the nearest power of 2, with same approach
                 * as malloc_bytes() uses. */
                j = 1;
-               i = size - 1;
-               while (i >>= 1)
+               ii = size - 1;
+               while (ii >>= 1)
                        j++;
                return ((size_t)1) << j;
        } else {