diff --git a/main/dbus/0001-_dbus_generate_random_bytes-fallback-to-getrandom-2.patch b/main/dbus/0001-_dbus_generate_random_bytes-use-getrandom-2.patch similarity index 74% rename from main/dbus/0001-_dbus_generate_random_bytes-fallback-to-getrandom-2.patch rename to main/dbus/0001-_dbus_generate_random_bytes-use-getrandom-2.patch index 68552c246591b3ecbdfaaeb4d204cef3bbc96c05..f900f057f7f0670786452d341d2685ea22c8a067 100644 --- a/main/dbus/0001-_dbus_generate_random_bytes-fallback-to-getrandom-2.patch +++ b/main/dbus/0001-_dbus_generate_random_bytes-use-getrandom-2.patch @@ -1,18 +1,21 @@ -From 48bc80fcb26f3e15d23766e100a3e2488c49f9ec Mon Sep 17 00:00:00 2001 +From 7faabbeb1d735069a2fd1e24e20b2543306a0e28 Mon Sep 17 00:00:00 2001 From: Natanael Copa <ncopa@alpinelinux.org> Date: Tue, 24 Mar 2020 11:31:41 +0100 -Subject: [PATCH] _dbus_generate_random_bytes: fallback to getrandom(2) +Subject: [PATCH] _dbus_generate_random_bytes: use 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. +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 <ncopa@alpinelinux.org> --- 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(-) + 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 @@ -76,7 +79,7 @@ index a1ba877a..c9f50b0f 100644 AC_CHECK_HEADERS(dirent.h) diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c -index e8cd5b33..fc9facc3 100644 +index e8cd5b33..44f7711e 100644 --- a/dbus/dbus-sysdeps-unix.c +++ b/dbus/dbus-sysdeps-unix.c @@ -80,6 +80,9 @@ @@ -89,30 +92,36 @@ index e8cd5b33..fc9facc3 100644 #ifdef HAVE_ADT #include <bsm/adt.h> -@@ -3170,9 +3173,23 @@ _dbus_generate_random_bytes (DBusString *str, - - if (fd < 0) - { +@@ -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 -+ result = getrandom (str, n_bytes, GRND_NONBLOCK); -+ if (result == n_bytes) -+ return TRUE; ++ 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; + -+ 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)); ++ _dbus_string_set_length (str, old_len); +#endif - return FALSE; - } + /* note, urandom on linux will fall back to pseudorandom */ + fd = open ("/dev/urandom", O_RDONLY); -- -2.25.2 +2.26.0 diff --git a/main/dbus/APKBUILD b/main/dbus/APKBUILD index ffa53420d96a1b8525f445e9bf52817d5545cc94..440df172d763d89e13c432162f87d9ff2fda3d2e 100644 --- a/main/dbus/APKBUILD +++ b/main/dbus/APKBUILD @@ -1,7 +1,7 @@ # Maintainer: Natanael Copa <ncopa@alpinelinux.org> 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"