summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2012-08-15 19:26:53 -0400
committerNick Mathewson <nickm@torproject.org>2012-08-15 19:26:53 -0400
commit6a33c33a12f3af414e97b91d5718ea16f2d26673 (patch)
treea5f4dcd8da4e27ba463fc88b6bcbfb1da0934dd3
parent91b52a259a271df7ceeea6d8bf7adbd4d7e15a6c (diff)
downloadtor-6a33c33a12f3af414e97b91d5718ea16f2d26673.tar.gz
tor-6a33c33a12f3af414e97b91d5718ea16f2d26673.zip
Fix warnings and 64-bit problems in openbsd-malloc code
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.
-rw-r--r--changes/bug63796
-rw-r--r--configure.in1
-rw-r--r--src/common/OpenBSD_malloc_Linux.c31
3 files changed, 29 insertions, 9 deletions
diff --git a/changes/bug6379 b/changes/bug6379
new file mode 100644
index 0000000000..1f2b6941cd
--- /dev/null
+++ b/changes/bug6379
@@ -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.
+
diff --git a/configure.in b/configure.in
index 1db7d08e20..8aa90f6414 100644
--- a/configure.in
+++ b/configure.in
@@ -300,6 +300,7 @@ AC_CHECK_FUNCS(
gmtime_r \
inet_aton \
ioctl \
+ issetugid \
localtime_r \
lround \
memmem \
diff --git a/src/common/OpenBSD_malloc_Linux.c b/src/common/OpenBSD_malloc_Linux.c
index 92ca9c0066..39c8f8b762 100644
--- a/src/common/OpenBSD_malloc_Linux.c
+++ b/src/common/OpenBSD_malloc_Linux.c
@@ -14,6 +14,10 @@
* ----------------------------------------------------------------------------
*/
+/* 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 {