diff --git a/ChangeLog b/ChangeLog index 0f81cbcbe..7a2a07b6a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2013-10-08 Vladimir Serbinenko + + * 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 * 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 index 000000000..bb9758c77 --- /dev/null +++ b/grub-core/osdep/basic/random.c @@ -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 . + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +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")); +} diff --git a/grub-core/osdep/random.c b/grub-core/osdep/random.c index 355c11254..9abdb01c6 100644 --- a/grub-core/osdep/random.c +++ b/grub-core/osdep/random.c @@ -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 diff --git a/grub-core/osdep/unix/random.c b/grub-core/osdep/unix/random.c index 8ef6aa60e..2a97fc1aa 100644 --- a/grub-core/osdep/unix/random.c +++ b/grub-core/osdep/unix/random.c @@ -33,11 +33,6 @@ 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;