Let secmem init return an error if the memeory could not be locked.
authorWerner Koch <wk@gnupg.org>
Thu, 19 Oct 2006 10:34:46 +0000 (10:34 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 19 Oct 2006 10:34:46 +0000 (10:34 +0000)
src/ChangeLog
src/global.c
src/secmem.c
src/secmem.h

index 2ff7e9b..be1a27b 100644 (file)
@@ -1,3 +1,11 @@
+2006-10-19  Werner Koch  <wk@g10code.com>
+
+       * global.c (gcry_control) <GCRYCTL_INIT_SECMEM>: Return an error
+       if the memory could not be locked.
+       * secmem.c (not_locked): New.
+       (_gcry_secmem_get_flags): Return that flag.
+       * secmem.h (GCRY_SECMEM_FLAG_NOT_LOCKED): New.
+
 2006-10-05  Werner Koch  <wk@g10code.com>
 
        * module.c (_gcry_module_id_new): Don't assign modules in the range
index d62c5be..0692a56 100644 (file)
@@ -251,6 +251,8 @@ gcry_control (enum gcry_ctl_cmds cmd, ...)
     case GCRYCTL_INIT_SECMEM:
       global_init ();
       _gcry_secmem_init (va_arg (arg_ptr, unsigned int));
+      if ((_gcry_secmem_get_flags () & GCRY_SECMEM_FLAG_NOT_LOCKED))
+        err = GPG_ERR_GENERAL;
       break;
 
     case GCRYCTL_TERM_SECMEM:
index 6fa07a5..8afa86e 100644 (file)
@@ -75,6 +75,7 @@ static volatile int pool_is_mmapped;
 /* FIXME?  */
 static int disable_secmem;
 static int show_warning;
+static int not_locked;
 static int no_warning;
 static int suspend_warning;
 
@@ -246,6 +247,7 @@ lock_pool (void *p, size_t n)
          )
        log_error ("can't lock memory: %s\n", strerror (err));
       show_warning = 1;
+      not_locked = 1;
     }
 
 #elif defined(HAVE_MLOCK)
@@ -299,6 +301,7 @@ lock_pool (void *p, size_t n)
          )
        log_error ("can't lock memory: %s\n", strerror (err));
       show_warning = 1;
+      not_locked = 1;
     }
 
 #elif defined ( __QNX__ )
@@ -417,6 +420,7 @@ _gcry_secmem_get_flags (void)
 
   flags = no_warning ? GCRY_SECMEM_FLAG_NO_WARNING : 0;
   flags |= suspend_warning ? GCRY_SECMEM_FLAG_SUSPEND_WARNING : 0;
+  flags |= not_locked ? GCRY_SECMEM_FLAG_NOT_LOCKED : 0;
 
   SECMEM_UNLOCK;
 
index fd6a8a7..29e151a 100644 (file)
@@ -34,5 +34,6 @@ int _gcry_private_is_secure (const void *p);
 /* Flags for _gcry_secmem_{set,get}_flags.  */
 #define GCRY_SECMEM_FLAG_NO_WARNING      (1 << 0)
 #define GCRY_SECMEM_FLAG_SUSPEND_WARNING (1 << 1)
+#define GCRY_SECMEM_FLAG_NOT_LOCKED      (1 << 2)
 
 #endif /* G10_SECMEM_H */