Explorar o código

Remove linux getrandom and use C++ stdlib instead

Tatsuhiro Tsujikawa %!s(int64=7) %!d(string=hai) anos
pai
achega
03f40af361
Modificáronse 5 ficheiros con 2 adicións e 190 borrados
  1. 0 16
      configure.ac
  2. 0 4
      src/Makefile.am
  3. 2 23
      src/SimpleRandomizer.cc
  4. 0 98
      src/getrandom_linux.c
  5. 0 49
      src/getrandom_linux.h

+ 0 - 16
configure.ac

@@ -754,7 +754,6 @@ AC_CHECK_FUNCS([__argz_count \
                 gethostbyname \
                 getifaddrs \
                 getpagesize \
-                getrandom \
                 memchr \
                 memmove \
                 mempcpy \
@@ -790,21 +789,6 @@ AC_CHECK_FUNCS([__argz_count \
                 utime \
                 utimes])
 
-AC_MSG_CHECKING([for getrandom linux syscall interface])
-AC_LINK_IFELSE([AC_LANG_PROGRAM([[
-#include <sys/syscall.h>
-#include <linux/random.h>
-]],
-[[
-int x = GRND_NONBLOCK;
-int y = (int)SYS_getrandom;
-]])],
-  [have_getrandom_interface=yes
-   AC_DEFINE([HAVE_GETRANDOM_INTERFACE], [1], [Define to 1 if getrandom linux syscall interface is available.])],
-  [have_getrandom_interface=no])
-AC_MSG_RESULT([$have_getrandom_interface])
-AM_CONDITIONAL([HAVE_GETRANDOM_INTERFACE], [test "x$have_getrandom_interface" = "xyes"])
-
 dnl Put tcmalloc/jemalloc checks after the posix_memalign check.
 dnl These libraries may implement posix_memalign, while the usual CRT may not
 dnl (e.g. mingw). Since we aren't including the corresponding library headers

+ 0 - 4
src/Makefile.am

@@ -673,10 +673,6 @@ if HAVE_KQUEUE
 SRCS += KqueueEventPoll.cc KqueueEventPoll.h
 endif # HAVE_KQUEUE
 
-if HAVE_GETRANDOM_INTERFACE
-SRCS += getrandom_linux.c getrandom_linux.h
-endif # HAVE_GETRANDOM_INTERFACE
-
 if HAVE_LIBUV
 SRCS += LibuvEventPoll.cc LibuvEventPoll.h
 endif # HAVE_LIBUV

+ 2 - 23
src/SimpleRandomizer.cc

@@ -45,12 +45,6 @@
 #include "LogFactory.h"
 #include "fmt.h"
 
-#ifdef HAVE_GETRANDOM_INTERFACE
-#  include <errno.h>
-#  include <linux/errno.h>
-#  include "getrandom_linux.h"
-#endif
-
 namespace aria2 {
 
 std::unique_ptr<SimpleRandomizer> SimpleRandomizer::randomizer_;
@@ -96,22 +90,7 @@ void SimpleRandomizer::getRandomBytes(unsigned char* buf, size_t len)
 #ifdef __MINGW32__
   BOOL r = CryptGenRandom(provider_, len, reinterpret_cast<BYTE*>(buf));
   assert(r);
-#else // ! __MINGW32__
-#  if defined(HAVE_GETRANDOM_INTERFACE)
-  static bool have_random_support = true;
-  if (have_random_support) {
-    auto rv = getrandom_linux(buf, len);
-    if (rv != -1) {
-      // getrandom is not supposed to fail, ever, so, we want to assert here.
-      assert(rv >= 0 && (size_t)rv == len);
-      return;
-    }
-    have_random_support = false;
-    A2_LOG_INFO("Disabled getrandom support, because kernel does not "
-                "implement this feature (ENOSYS)");
-  }
-// Fall through to generic implementation
-#  endif // defined(HAVE_GETRANDOM_INTERFACE)
+#else  // ! __MINGW32__
   auto ubuf = reinterpret_cast<result_type*>(buf);
   size_t q = len / sizeof(result_type);
   auto dis = std::uniform_int_distribution<result_type>();
@@ -121,7 +100,7 @@ void SimpleRandomizer::getRandomBytes(unsigned char* buf, size_t len)
   const size_t r = len % sizeof(result_type);
   auto last = dis(gen_);
   memcpy(ubuf, &last, r);
-#endif   // ! __MINGW32__
+#endif // ! __MINGW32__
 }
 
 } // namespace aria2

+ 0 - 98
src/getrandom_linux.c

@@ -1,98 +0,0 @@
-/* <!-- copyright */
-/*
- * aria2 - The high speed download utility
- *
- * Copyright (C) 2014 Nils Maier
- *
- * This program 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 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * In addition, as a special exception, the copyright holders give
- * permission to link the code of portions of this program with the
- * OpenSSL library under certain conditions as described in each
- * individual source file, and distribute linked combinations
- * including the two.
- * You must obey the GNU General Public License in all respects
- * for all of the code used other than OpenSSL.  If you modify
- * file(s) with this exception, you may extend this exception to your
- * version of the file(s), but you are not obligated to do so.  If you
- * do not wish to do so, delete this exception statement from your
- * version.  If you delete this exception statement from all source
- * files in the program, then also delete it here.
- */
-/* copyright --> */
-
-#define _GNUSOURCE
-#include <unistd.h>
-#include <sys/syscall.h>
-#include <linux/random.h>
-#include <sys/random.h>
-#include <errno.h>
-#include <linux/errno.h>
-#include <stdint.h>
-#include <stdio.h>
-
-#include "config.h"
-#include "getrandom_linux.h"
-
-int getrandom_linux(void* buf, size_t buflen)
-{
-  int rv = 0;
-  uint8_t* p = buf;
-
-  /* Loop while we did not fully retrieve what the user asked for.
-   * This may happen in particular when a call was EINTRupted.
-   */
-  while (buflen) {
-    int read;
-#ifdef HAVE_GETRANDOM
-    /* libc already has support */
-    read = getrandom(p, buflen, 0);
-#else  // HAVE_GETRANDOM
-    /* libc has no support, make the syscall ourselves */
-    read = syscall(SYS_getrandom, p, buflen, 0);
-    /* Some libc impl. might mess -ERESTART up */
-    if (read == -EINTR || read == -ERESTART) {
-      /* ERESTART, like EINTR, should restart the call, later, so handle both
-       * the same way.
-       */
-      errno = EINTR;
-      read = -1;
-    }
-    /* Some other non-interrupted error happened, put error code into errno and
-     * switch read to -1 (return value).
-     */
-    if (read < -1) {
-      errno = -read;
-      read = -1;
-    }
-#endif // HAVE_GETRANDOM
-    if (read < 0) {
-      if (errno == EINTR) {
-        /* Restart call */
-        continue;
-      }
-      /* Call failed, return -1, errno should be set up correctly at this
-       * point.
-       */
-      return -1;
-    }
-    /* We got some more randomness */
-    p += read;
-    rv += read;
-    buflen -= read;
-  }
-
-  return rv;
-}

+ 0 - 49
src/getrandom_linux.h

@@ -1,49 +0,0 @@
-/* <!-- copyright */
-/*
- * aria2 - The high speed download utility
- *
- * Copyright (C) 2014 Nils Maier
- *
- * This program 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 2 of the License, or
- * (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * In addition, as a special exception, the copyright holders give
- * permission to link the code of portions of this program with the
- * OpenSSL library under certain conditions as described in each
- * individual source file, and distribute linked combinations
- * including the two.
- * You must obey the GNU General Public License in all respects
- * for all of the code used other than OpenSSL.  If you modify
- * file(s) with this exception, you may extend this exception to your
- * version of the file(s), but you are not obligated to do so.  If you
- * do not wish to do so, delete this exception statement from your
- * version.  If you delete this exception statement from all source
- * files in the program, then also delete it here.
- */
-/* copyright --> */
-
-#ifndef D_GETRANDOM_LINUX_H
-#define D_GETRANDOM_LINUX_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int getrandom_linux(void* buf, size_t buflen);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* D_GETRANDOM_LINUX_H */