376991d
diff -up libgcrypt-1.6.3/random/random-csprng.c.urandom-only libgcrypt-1.6.3/random/random-csprng.c
376991d
--- libgcrypt-1.6.3/random/random-csprng.c.urandom-only	2015-02-27 10:54:03.000000000 +0100
376991d
+++ libgcrypt-1.6.3/random/random-csprng.c	2015-03-20 08:29:27.513113519 +0100
376991d
@@ -1125,8 +1125,7 @@ getfnc_gather_random (void))(void (*)(co
376991d
              enum random_origins, size_t, int);
376991d
 
376991d
 #if USE_RNDLINUX
376991d
-  if ( !access (NAME_OF_DEV_RANDOM, R_OK)
376991d
-       && !access (NAME_OF_DEV_URANDOM, R_OK))
376991d
+  if (!access (NAME_OF_DEV_URANDOM, R_OK))
376991d
     {
376991d
       fnc = _gcry_rndlinux_gather_random;
376991d
       return fnc;
376991d
diff -up libgcrypt-1.6.3/random/rndlinux.c.urandom-only libgcrypt-1.6.3/random/rndlinux.c
376991d
--- libgcrypt-1.6.3/random/rndlinux.c.urandom-only	2015-03-20 08:36:13.472098269 +0100
376991d
+++ libgcrypt-1.6.3/random/rndlinux.c	2015-03-20 08:36:43.765097131 +0100
376991d
@@ -178,7 +178,11 @@ _gcry_rndlinux_gather_random (void (*add
376991d
     {
376991d
       if (fd_random == -1)
376991d
         {
376991d
-          fd_random = open_device (NAME_OF_DEV_RANDOM, (ever_opened & 1), 1);
376991d
+          /* We try to open /dev/random first but in case the open fails
376991d
+             we gracefully retry with /dev/urandom. */
376991d
+          fd_random = open_device (NAME_OF_DEV_RANDOM, 0, 0);
376991d
+          if (fd_random == -1)
376991d
+            fd_random = open_device (NAME_OF_DEV_URANDOM, (ever_opened & 1), 1);
376991d
           ever_opened |= 1;
376991d
         }
376991d
       fd = fd_random;