Use sysconf() when possible as not all platforms have getpagesize().
authorDavid Shaw <dshaw@jabberwocky.com>
Mon, 16 Apr 2007 13:37:09 +0000 (13:37 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Mon, 16 Apr 2007 13:37:09 +0000 (13:37 +0000)
ChangeLog
acinclude.m4
configure.ac
util/ChangeLog
util/secmem.c

index b96760b..a7cc526 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-04-16  David Shaw  <dshaw@jabberwocky.com>
+
+       * acinclude.m4: Use sysconf() if available to avoid a false
+       positive on HAVE_BROKEN_MLOCK when checking for page size.
+
+       * configure.ac: Check for sysconf.
+
 2007-04-15  David Shaw  <dshaw@jabberwocky.com>
 
        * configure.ac: QNX puts resolver functions in libsocket.  From
index fb7edde..30eeb85 100644 (file)
@@ -420,7 +420,16 @@ define(GNUPG_CHECK_MLOCK,
                 {
                     char *pool;
                     int err;
-                    long int pgsize = getpagesize();
+                    long int pgsize;
+
+               #if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE)
+                    pgsize = sysconf(_SC_PAGESIZE);
+               #elif defined(HAVE_GETPAGESIZE)
+                    pgsize = getpagesize();
+               #endif
+
+                   if(pgsize==-1)
+                      pgsize = 4096;
 
                     pool = malloc( 4096 + pgsize );
                     if( !pool )
index 6a30e8e..10ffb7c 100644 (file)
@@ -953,7 +953,7 @@ AC_CHECK_DECLS(getpagesize)
 AC_FUNC_FSEEKO
 AC_FUNC_VPRINTF
 AC_FUNC_FORK
-AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr strtoul mmap)
+AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr strtoul mmap sysconf)
 AC_CHECK_FUNCS(strcasecmp strncasecmp ctermid times unsetenv getpwnam getpwuid)
 AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime)
 AC_CHECK_FUNCS(atexit raise getpagesize strftime nl_langinfo setlocale)
index 226f245..70a95c7 100644 (file)
@@ -1,3 +1,8 @@
+2007-04-16  David Shaw  <dshaw@jabberwocky.com>
+
+       * secmem.c (init_pool): Use sysconf() if available to determine
+       page size.
+
 2007-04-15  David Shaw  <dshaw@jabberwocky.com>
 
        * argparse.c (default_strusage): Copyright 2007.
index a0248da..dc8a8f0 100644 (file)
@@ -1,5 +1,6 @@
 /* secmem.c  - memory allocation from a secure heap
- *     Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+ *     Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ *                    2007 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -218,19 +219,22 @@ lock_pool( void *p, size_t n )
 static void
 init_pool( size_t n)
 {
-    size_t pgsize;
+    size_t pgsize=-1;
 
     poolsize = n;
 
     if( disable_secmem )
        log_bug("secure memory is disabled");
 
-#ifdef HAVE_GETPAGESIZE
+#if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE)
+    pgsize = sysconf(_SC_PAGESIZE);
+#elif defined(HAVE_GETPAGESIZE)
     pgsize = getpagesize();
-#else
-    pgsize = 4096;
 #endif
 
+    if(pgsize==-1)
+      pgsize = 4096;
+
 #ifdef HAVE_MMAP
     poolsize = (poolsize + pgsize -1 ) & ~(pgsize-1);
 #ifdef MAP_ANONYMOUS