Get more in sync to the Fedora version.
authorWerner Koch <wk@gnupg.org>
Thu, 2 Jul 2009 14:12:44 +0000 (14:12 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 2 Jul 2009 14:12:44 +0000 (14:12 +0000)
random/ChangeLog
random/rndhw.c
src/ChangeLog
src/fips.c

index c3bcb58..c64671c 100644 (file)
@@ -1,3 +1,7 @@
+2009-07-02  Werner Koch  <wk@g10code.com>
+
+       * rndhw.c (poll_padlock): Asm change from Fedora.
+
 2009-01-22  Werner Koch  <wk@g10code.com>
 
        * random.c (_gcry_random_deinit_external_test): Do not return a
 2009-01-22  Werner Koch  <wk@g10code.com>
 
        * random.c (_gcry_random_deinit_external_test): Do not return a
  This file is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  This file is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-       
\ No newline at end of file
+
index 2c78b47..0961d10 100644 (file)
@@ -41,8 +41,8 @@ static size_t
 poll_padlock (void (*add)(const void*, size_t, enum random_origins),
               enum random_origins origin, int fast)
 {
 poll_padlock (void (*add)(const void*, size_t, enum random_origins),
               enum random_origins origin, int fast)
 {
-  char buffer[64+8] __attribute__ ((aligned (8)));
-  char *p;
+  volatile char buffer[64+8] __attribute__ ((aligned (8)));
+  volatile char *p;
   unsigned int nbytes, status;
   
   /* Peter Gutmann's cryptlib tests again whether the RNG is enabled
   unsigned int nbytes, status;
   
   /* Peter Gutmann's cryptlib tests again whether the RNG is enabled
@@ -59,8 +59,7 @@ poll_padlock (void (*add)(const void*, size_t, enum random_origins),
         ("movl %1, %%edi\n\t"         /* Set buffer.  */
          "xorl %%edx, %%edx\n\t"      /* Request up to 8 bytes.  */
          ".byte 0x0f, 0xa7, 0xc0\n\t" /* XSTORE RNG. */
         ("movl %1, %%edi\n\t"         /* Set buffer.  */
          "xorl %%edx, %%edx\n\t"      /* Request up to 8 bytes.  */
          ".byte 0x0f, 0xa7, 0xc0\n\t" /* XSTORE RNG. */
-         "movl %%eax, %0\n"           /* Return the status.  */
-         : "=g" (status)
+         : "=a" (status)
          : "g" (p)
          : "%edx", "%edi", "cc"
          );
          : "g" (p)
          : "%edx", "%edi", "cc"
          );
@@ -88,7 +87,7 @@ poll_padlock (void (*add)(const void*, size_t, enum random_origins),
 
   if (nbytes)
     {
 
   if (nbytes)
     {
-      (*add) (buffer, nbytes, origin);
+      (*add) ((void*)buffer, nbytes, origin);
       wipememory (buffer, nbytes);
     }
   return nbytes;
       wipememory (buffer, nbytes);
     }
   return nbytes;
index 94cc4be..f7bcc62 100644 (file)
@@ -1,5 +1,8 @@
 2009-07-02  Werner Koch  <wk@g10code.com>
 
 2009-07-02  Werner Koch  <wk@g10code.com>
 
+       * fips.c (_gcry_initialize_fips_mode): Do not use FIPS mode if
+       /proc/.../fips_enabled has insufficient permissions.
+
        * dumpsexp.c (main): Fix handling multiple files.
        (parse_and_print): Implement hex and octal escaping.
 
        * dumpsexp.c (main): Fix handling multiple files.
        (parse_and_print): Implement hex and octal escaping.
 
index 9b24da9..91f3042 100644 (file)
@@ -155,6 +155,7 @@ _gcry_initialize_fips_mode (int force)
         fclose (fp);
       }
     else if ((saved_errno = errno) != ENOENT
         fclose (fp);
       }
     else if ((saved_errno = errno) != ENOENT
+             && saved_errno != EACCES
              && !access ("/proc/version", F_OK) )
       {
         /* Problem reading the fips file despite that we have the proc
              && !access ("/proc/version", F_OK) )
       {
         /* Problem reading the fips file despite that we have the proc