From ff75605a5229e99f13458b0fcd0cdf18b72f0e81 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Thu, 26 Mar 2020 17:26:03 +0000 Subject: main/dbus: update getrandom patch update getrandom patch after feedback from upstream ref #11327 --- ...rate_random_bytes-fallback-to-getrandom-2.patch | 118 ------------------- ...bus_generate_random_bytes-use-getrandom-2.patch | 127 +++++++++++++++++++++ main/dbus/APKBUILD | 6 +- 3 files changed, 130 insertions(+), 121 deletions(-) delete mode 100644 main/dbus/0001-_dbus_generate_random_bytes-fallback-to-getrandom-2.patch create mode 100644 main/dbus/0001-_dbus_generate_random_bytes-use-getrandom-2.patch (limited to 'main') diff --git a/main/dbus/0001-_dbus_generate_random_bytes-fallback-to-getrandom-2.patch b/main/dbus/0001-_dbus_generate_random_bytes-fallback-to-getrandom-2.patch deleted file mode 100644 index 68552c2465..0000000000 --- a/main/dbus/0001-_dbus_generate_random_bytes-fallback-to-getrandom-2.patch +++ /dev/null @@ -1,118 +0,0 @@ -From 48bc80fcb26f3e15d23766e100a3e2488c49f9ec Mon Sep 17 00:00:00 2001 -From: Natanael Copa -Date: Tue, 24 Mar 2020 11:31:41 +0100 -Subject: [PATCH] _dbus_generate_random_bytes: fallback to getrandom(2) - -Fall back to getrandom(2) in case /dev/urandom is missing. This may for -example happen if dbus-uuidgen is called in a chroot or at early boot. - -Signed-off-by: Natanael Copa ---- - cmake/ConfigureChecks.cmake | 2 ++ - cmake/config.h.cmake | 2 ++ - configure.ac | 3 ++- - dbus/dbus-sysdeps-unix.c | 17 +++++++++++++++++ - 4 files changed, 23 insertions(+), 1 deletion(-) - -diff --git a/cmake/ConfigureChecks.cmake b/cmake/ConfigureChecks.cmake -index a9a5fc90..f920c75f 100644 ---- a/cmake/ConfigureChecks.cmake -+++ b/cmake/ConfigureChecks.cmake -@@ -26,6 +26,7 @@ check_include_file(strings.h HAVE_STRINGS_H) - check_include_file(syslog.h HAVE_SYSLOG_H) - check_include_files("stdint.h;sys/types.h;sys/event.h" HAVE_SYS_EVENT_H) - check_include_file(sys/inotify.h HAVE_SYS_INOTIFY_H) -+check_include_file(sys/random.h HAVE_SYS_RANDOM_H) - check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) - check_include_file(sys/stat.h HAVE_SYS_STAT_H) - check_include_file(sys/types.h HAVE_SYS_TYPES_H) -@@ -62,6 +63,7 @@ check_symbol_exists(inotify_init1 "sys/inotify.h" HAVE_INOTIFY_INIT1) - check_symbol_exists(SCM_RIGHTS "sys/types.h;sys/socket.h;sys/un.h" HAVE_UNIX_FD_PASSING) - check_symbol_exists(prctl "sys/prctl.h" HAVE_PRCTL) - check_symbol_exists(raise "signal.h" HAVE_RAISE) -+check_symbol_exists(getrandom "sys/random.h" HAVE_GETRANDOM) - check_symbol_exists(getrlimit "sys/resource.h;sys/time.h" HAVE_GETRLIMIT) - check_symbol_exists(prlimit "sys/resource.h;sys/time.h" HAVE_PRLIMIT) - check_symbol_exists(setrlimit "sys/resource.h;sys/time.h" HAVE_SETRLIMIT) -diff --git a/cmake/config.h.cmake b/cmake/config.h.cmake -index 11191821..10388fce 100644 ---- a/cmake/config.h.cmake -+++ b/cmake/config.h.cmake -@@ -128,6 +128,7 @@ - #cmakedefine HAVE_SYS_EVENTS_H - #cmakedefine HAVE_SYS_INOTIFY_H - #cmakedefine HAVE_SYS_PRCTL_H -+#cmakedefine HAVE_SYS_RANDOM_H 1 - #cmakedefine HAVE_SYS_RESOURCE_H - #cmakedefine HAVE_SYS_STAT_H - -@@ -205,6 +206,7 @@ - #cmakedefine HAVE_ACCEPT4 1 - #cmakedefine HAVE_DIRFD 1 - #cmakedefine HAVE_INOTIFY_INIT1 1 -+#cmakedefine HAVE_GETRANDOM 1 - #cmakedefine HAVE_GETRLIMIT 1 - #cmakedefine HAVE_PRLIMIT 1 - #cmakedefine HAVE_SETRLIMIT 1 -diff --git a/configure.ac b/configure.ac -index a1ba877a..c9f50b0f 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -619,7 +619,7 @@ AC_DEFINE_UNQUOTED([DBUS_USE_SYNC], [$have_sync], [Use the gcc __sync extension] - AC_SEARCH_LIBS(socket,[socket network]) - AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)]) - --AC_CHECK_FUNCS([vsnprintf vasprintf nanosleep usleep setenv clearenv unsetenv socketpair getgrouplist fpathconf setrlimit poll setlocale localeconv strtoll strtoull issetugid getresuid setresuid getrlimit prlimit]) -+AC_CHECK_FUNCS([vsnprintf vasprintf nanosleep usleep setenv clearenv unsetenv socketpair getgrouplist fpathconf setrlimit poll setlocale localeconv strtoll strtoull issetugid getresuid setresuid getrlimit getrandom prlimit]) - - AC_CHECK_HEADERS([syslog.h]) - if test "x$ac_cv_header_syslog_h" = "xyes"; then -@@ -667,6 +667,7 @@ fi - - AC_CHECK_HEADERS(sys/resource.h) - AC_CHECK_HEADERS([sys/time.h]) -+AC_CHECK_HEADERS([sys/random.h]) - - AC_CHECK_HEADERS(dirent.h) - -diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c -index e8cd5b33..fc9facc3 100644 ---- a/dbus/dbus-sysdeps-unix.c -+++ b/dbus/dbus-sysdeps-unix.c -@@ -80,6 +80,9 @@ - #ifdef HAVE_ALLOCA_H - #include - #endif -+#ifdef HAVE_SYS_RANDOM_H -+#include -+#endif - - #ifdef HAVE_ADT - #include -@@ -3170,9 +3173,23 @@ _dbus_generate_random_bytes (DBusString *str, - - if (fd < 0) - { -+#ifdef HAVE_GETRANDOM -+ result = getrandom (str, n_bytes, GRND_NONBLOCK); -+ if (result == n_bytes) -+ return TRUE; -+ -+ if (result < 0) -+ dbus_set_error (error, _dbus_error_from_errno (errno), -+ "Could not read from getrandom(): %s", -+ _dbus_strerror (errno)); -+ else -+ dbus_set_error (error, DBUS_ERROR_IO_ERROR, -+ "Short read from getrandom()"); -+#else - dbus_set_error (error, _dbus_error_from_errno (errno), - "Could not open /dev/urandom: %s", - _dbus_strerror (errno)); -+#endif - return FALSE; - } - --- -2.25.2 - diff --git a/main/dbus/0001-_dbus_generate_random_bytes-use-getrandom-2.patch b/main/dbus/0001-_dbus_generate_random_bytes-use-getrandom-2.patch new file mode 100644 index 0000000000..f900f057f7 --- /dev/null +++ b/main/dbus/0001-_dbus_generate_random_bytes-use-getrandom-2.patch @@ -0,0 +1,127 @@ +From 7faabbeb1d735069a2fd1e24e20b2543306a0e28 Mon Sep 17 00:00:00 2001 +From: Natanael Copa +Date: Tue, 24 Mar 2020 11:31:41 +0100 +Subject: [PATCH] _dbus_generate_random_bytes: use getrandom(2) + +Use getrandom(2) and fall back to /dev/urandom if it is missing or if it +fails some any reason. + +This solves problem where dbus-uuidgen is called from a chroot which +lacks /dev/urandom. + +Signed-off-by: Natanael Copa +--- + cmake/ConfigureChecks.cmake | 2 ++ + cmake/config.h.cmake | 2 ++ + configure.ac | 3 ++- + dbus/dbus-sysdeps-unix.c | 23 ++++++++++++++++++++--- + 4 files changed, 26 insertions(+), 4 deletions(-) + +diff --git a/cmake/ConfigureChecks.cmake b/cmake/ConfigureChecks.cmake +index a9a5fc90..f920c75f 100644 +--- a/cmake/ConfigureChecks.cmake ++++ b/cmake/ConfigureChecks.cmake +@@ -26,6 +26,7 @@ check_include_file(strings.h HAVE_STRINGS_H) + check_include_file(syslog.h HAVE_SYSLOG_H) + check_include_files("stdint.h;sys/types.h;sys/event.h" HAVE_SYS_EVENT_H) + check_include_file(sys/inotify.h HAVE_SYS_INOTIFY_H) ++check_include_file(sys/random.h HAVE_SYS_RANDOM_H) + check_include_file(sys/resource.h HAVE_SYS_RESOURCE_H) + check_include_file(sys/stat.h HAVE_SYS_STAT_H) + check_include_file(sys/types.h HAVE_SYS_TYPES_H) +@@ -62,6 +63,7 @@ check_symbol_exists(inotify_init1 "sys/inotify.h" HAVE_INOTIFY_INIT1) + check_symbol_exists(SCM_RIGHTS "sys/types.h;sys/socket.h;sys/un.h" HAVE_UNIX_FD_PASSING) + check_symbol_exists(prctl "sys/prctl.h" HAVE_PRCTL) + check_symbol_exists(raise "signal.h" HAVE_RAISE) ++check_symbol_exists(getrandom "sys/random.h" HAVE_GETRANDOM) + check_symbol_exists(getrlimit "sys/resource.h;sys/time.h" HAVE_GETRLIMIT) + check_symbol_exists(prlimit "sys/resource.h;sys/time.h" HAVE_PRLIMIT) + check_symbol_exists(setrlimit "sys/resource.h;sys/time.h" HAVE_SETRLIMIT) +diff --git a/cmake/config.h.cmake b/cmake/config.h.cmake +index 11191821..10388fce 100644 +--- a/cmake/config.h.cmake ++++ b/cmake/config.h.cmake +@@ -128,6 +128,7 @@ + #cmakedefine HAVE_SYS_EVENTS_H + #cmakedefine HAVE_SYS_INOTIFY_H + #cmakedefine HAVE_SYS_PRCTL_H ++#cmakedefine HAVE_SYS_RANDOM_H 1 + #cmakedefine HAVE_SYS_RESOURCE_H + #cmakedefine HAVE_SYS_STAT_H + +@@ -205,6 +206,7 @@ + #cmakedefine HAVE_ACCEPT4 1 + #cmakedefine HAVE_DIRFD 1 + #cmakedefine HAVE_INOTIFY_INIT1 1 ++#cmakedefine HAVE_GETRANDOM 1 + #cmakedefine HAVE_GETRLIMIT 1 + #cmakedefine HAVE_PRLIMIT 1 + #cmakedefine HAVE_SETRLIMIT 1 +diff --git a/configure.ac b/configure.ac +index a1ba877a..c9f50b0f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -619,7 +619,7 @@ AC_DEFINE_UNQUOTED([DBUS_USE_SYNC], [$have_sync], [Use the gcc __sync extension] + AC_SEARCH_LIBS(socket,[socket network]) + AC_CHECK_FUNC(gethostbyname,,[AC_CHECK_LIB(nsl,gethostbyname)]) + +-AC_CHECK_FUNCS([vsnprintf vasprintf nanosleep usleep setenv clearenv unsetenv socketpair getgrouplist fpathconf setrlimit poll setlocale localeconv strtoll strtoull issetugid getresuid setresuid getrlimit prlimit]) ++AC_CHECK_FUNCS([vsnprintf vasprintf nanosleep usleep setenv clearenv unsetenv socketpair getgrouplist fpathconf setrlimit poll setlocale localeconv strtoll strtoull issetugid getresuid setresuid getrlimit getrandom prlimit]) + + AC_CHECK_HEADERS([syslog.h]) + if test "x$ac_cv_header_syslog_h" = "xyes"; then +@@ -667,6 +667,7 @@ fi + + AC_CHECK_HEADERS(sys/resource.h) + AC_CHECK_HEADERS([sys/time.h]) ++AC_CHECK_HEADERS([sys/random.h]) + + AC_CHECK_HEADERS(dirent.h) + +diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c +index e8cd5b33..44f7711e 100644 +--- a/dbus/dbus-sysdeps-unix.c ++++ b/dbus/dbus-sysdeps-unix.c +@@ -80,6 +80,9 @@ + #ifdef HAVE_ALLOCA_H + #include + #endif ++#ifdef HAVE_SYS_RANDOM_H ++#include ++#endif + + #ifdef HAVE_ADT + #include +@@ -3158,12 +3161,26 @@ _dbus_generate_random_bytes (DBusString *str, + int n_bytes, + DBusError *error) + { +- int old_len; ++ int old_len = _dbus_string_get_length (str); + int fd; + int result; ++#ifdef HAVE_GETRANDOM ++ char *buffer; ++ ++ if (!_dbus_string_lengthen (str, n_bytes)) ++ { ++ _DBUS_SET_OOM (error); ++ return FALSE; ++ } ++ ++ buffer = _dbus_string_get_data_len (str, old_len, n_bytes); ++ result = getrandom (buffer, n_bytes, GRND_NONBLOCK); + +- old_len = _dbus_string_get_length (str); +- fd = -1; ++ if (result == n_bytes) ++ return TRUE; ++ ++ _dbus_string_set_length (str, old_len); ++#endif + + /* note, urandom on linux will fall back to pseudorandom */ + fd = open ("/dev/urandom", O_RDONLY); +-- +2.26.0 + diff --git a/main/dbus/APKBUILD b/main/dbus/APKBUILD index ffa53420d9..440df172d7 100644 --- a/main/dbus/APKBUILD +++ b/main/dbus/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Natanael Copa pkgname=dbus pkgver=1.12.16 -pkgrel=3 +pkgrel=4 pkgdesc="Freedesktop.org message bus system" options="!check" # Introduces circular dependency with xorg-server (xvfb-run -> xvfb) url="https://www.freedesktop.org/Software/dbus" @@ -22,7 +22,7 @@ makedepends="$depends_dev checkdepends="xvfb-run" install="$pkgname.pre-install $pkgname.post-install" source="https://dbus.freedesktop.org/releases/dbus/dbus-$pkgver.tar.gz - 0001-_dbus_generate_random_bytes-fallback-to-getrandom-2.patch + 0001-_dbus_generate_random_bytes-use-getrandom-2.patch $pkgname.initd " @@ -86,5 +86,5 @@ x11() { } sha512sums="27ae805170e9515a8bb0fba5f29d414edc70e3b6b28b7b65bbea47035b8eafa9ac4820cdc92645be6035f6748f8aa45679e1ffc84ba74a64859a3056d318b9bb dbus-1.12.16.tar.gz -10f074b88bcd0aaec2edba6ce346a6f52daf7cc79646e0ab86982325d137eefc0e1cb1f58a500d681a1a40348957bbc5cea358aeb55d248ec90d77a224d5f5cd 0001-_dbus_generate_random_bytes-fallback-to-getrandom-2.patch +3db35499361e84d8e2469b88b033f49813b179188ac25f1841a989988c352af398a56dfd94383813626c6dfd032194f7a9fcdba001ccc3e005e7cd22dae7a7ed 0001-_dbus_generate_random_bytes-use-getrandom-2.patch 4c6beba2382416e60a3adfa85ef843d90d93ca5f38c23f573e058ffca6d4fc3850d11d40938c74383bba61599569b7fdfb1fcf3b9d2f1463e6b2e2cc81097c84 dbus.initd" -- cgit v1.2.3