]> git.proxmox.com Git - grub2.git/commitdiff
* grub-core/osdep/basic/random.c: New file. Abort on an attempt to
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 8 Oct 2013 19:28:14 +0000 (21:28 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 8 Oct 2013 19:28:14 +0000 (21:28 +0200)
get random when no RNG is available.
* grub-core/osdep/random.c: Use basic/random.c on OS out of whitelist.

ChangeLog
grub-core/osdep/basic/random.c [new file with mode: 0644]
grub-core/osdep/random.c
grub-core/osdep/unix/random.c

index 0f81cbcbe1df28d07153e65bf073e4b3e0998501..7a2a07b6adc465d9ace9d05c975390d2b377b319 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-10-08  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/osdep/basic/random.c: New file. Abort on an attempt to
+       get random when no RNG is available.
+       * grub-core/osdep/random.c: Use basic/random.c on OS out of whitelist.
+
 2013-10-08  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * include/grub/util/lvm.h: Removed.
diff --git a/grub-core/osdep/basic/random.c b/grub-core/osdep/basic/random.c
new file mode 100644 (file)
index 0000000..bb9758c
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *  Copyright (C) 1992-1999,2001,2003,2004,2005,2009,2010,2011,2012,2013 Free Software Foundation, Inc.
+ *
+ *  GRUB is free software: you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation, either version 3 of the License, or
+ *  (at your option) any later version.
+ *
+ *  GRUB is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <config.h>
+
+#include <grub/types.h>
+#include <grub/crypto.h>
+#include <grub/auth.h>
+#include <grub/emu/misc.h>
+#include <grub/util/misc.h>
+#include <grub/i18n.h>
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+grub_get_random (void *out, grub_size_t len)
+{
+#warning "No random number generator is available for your OS. \
+Some functions like grub-mkpaswd and installing on UUID-less disks will be \
+disabled."
+  grub_util_error ("%s",
+                  _("no random number generator is available for your OS"));
+}
index 355c112542351a55179945168d1306039b393945..9abdb01c60a3830ef7c99f19fc2463769e5cd49d 100644 (file)
@@ -1,5 +1,10 @@
 #if defined (_WIN32) || defined (__CYGWIN__)
 #include "windows/random.c"
-#else
+#elif defined (__linux__) || defined (__FreeBSD__) \
+  || defined (__FreeBSD_kernel__) || defined (__OpenBSD__) \
+  || defined (__GNU__) || defined (__NetBSD__) \
+  || defined (__APPLE__) || defined(__sun__)
 #include "unix/random.c"
+#else
+#include "basic/random.c"
 #endif
index 8ef6aa60e4324cd83d9c922cc97620728b49ef26..2a97fc1aa76eab6855ad9fda94307556b47ba8ac 100644 (file)
 int
 grub_get_random (void *out, grub_size_t len)
 {
-#if ! defined (__linux__) && ! defined (__FreeBSD__) && ! defined (__FreeBSD_kernel__) && ! defined (__OpenBSD__) && !defined (__GNU__) && ! defined (_WIN32) && !defined(__CYGWIN__) && !defined (__NetBSD__) && !defined (__APPLE__) && !defined(__sun__)
-  /* TRANSLATORS: The generator might still be secure just GRUB isn't sure about it.  */
-  printf ("%s", _("WARNING: your random generator isn't known to be secure\n"));
-#warning "your random generator isn't known to be secure"
-#endif
   FILE *f;
   size_t rd;