(lock_pool): Don't print the warning for certain
authorWerner Koch <wk@gnupg.org>
Thu, 23 Oct 2003 07:45:07 +0000 (07:45 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 23 Oct 2003 07:45:07 +0000 (07:45 +0000)
systems, handle ENOMEM.

src/ChangeLog
src/secmem.c

index cad88cb..d6c10ca 100644 (file)
@@ -1,3 +1,8 @@
+2003-10-23  Werner Koch  <wk@gnupg.org>
+
+       * secmem.c (lock_pool): Don't print the warning for certain
+       systems, handle ENOMEM.
+
 2003-10-21  Werner Koch  <wk@gnupg.org>
 
        * secmem.c (_gcry_secmem_dump_stats): Fixed format sepcifier for a
index 9442cea..c4eb38d 100644 (file)
@@ -233,12 +233,15 @@ lock_pool (void *p, size_t n)
   if (err)
     {
       if (errno != EPERM
-#ifdef EAGAIN                  /* OpenBSD returns this */
+#ifdef EAGAIN  /* OpenBSD returns this */
          && errno != EAGAIN
 #endif
-#ifdef ENOSYS                  /* Some SCOs return this (function not implemented) */
+#ifdef ENOSYS  /* Some SCOs return this (function not implemented) */
          && errno != ENOSYS
 #endif
+#ifdef ENOMEM  /* Linux might return this. */
+            && errno != ENOMEM
+#endif
          )
        log_error ("can't lock memory: %s\n", strerror (err));
       show_warning = 1;
@@ -251,6 +254,10 @@ lock_pool (void *p, size_t n)
   uid = getuid ();
 
 #ifdef HAVE_BROKEN_MLOCK
+  /* Under HP/UX mlock segfaults if called by non-root.  Note, we have
+     noch checked whether mlock does really work under AIX where we
+     also detected a broken nlock.  Note further, that using plock ()
+     is not a good idea under AIX. */ 
   if (uid)
     {
       errno = EPERM;
@@ -262,11 +269,11 @@ lock_pool (void *p, size_t n)
       if (err && errno)
        err = errno;
     }
-#else
+#else /* !HAVE_BROKEN_MLOCK */
   err = mlock (p, n);
   if (err && errno)
     err = errno;
-#endif
+#endif /* !HAVE_BROKEN_MLOCK */
 
   if (uid && ! geteuid ())
     {
@@ -279,12 +286,15 @@ lock_pool (void *p, size_t n)
   if (err)
     {
       if (errno != EPERM
-#ifdef EAGAIN                  /* OpenBSD returns this */
+#ifdef EAGAIN  /* OpenBSD returns this. */
          && errno != EAGAIN
 #endif
-#ifdef ENOSYS                  /* Some SCOs return this (function not implemented) */
+#ifdef ENOSYS  /* Some SCOs return this (function not implemented). */
          && errno != ENOSYS
 #endif
+#ifdef ENOMEM  /* Linux might return this. */
+            && errno != ENOMEM
+#endif
          )
        log_error ("can't lock memory: %s\n", strerror (err));
       show_warning = 1;
@@ -296,6 +306,15 @@ lock_pool (void *p, size_t n)
    * wipes out the memory on a free().
    * Therefore it is sufficient to suppress the warning
    */
+#elif defined (HAVE_DOSISH_SYSTEM) || defined (__CYGWIN__)
+    /* It does not make sense to print such a warning, given the fact that 
+     * this whole Windows !@#$% and their user base are inherently insecure
+     */
+#elif defined (__riscos__)
+    /* no virtual memory on RISC OS, so no pages are swapped to disc,
+     * besides we don't have mmap, so we don't use it! ;-)
+     * But don't complain, as explained above.
+     */
 #else
   log_info ("Please note that you don't have secure memory on this system\n");
 #endif