]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
random-util: introduce random_bytes_allocate_iovec() helper function
authorYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 18 Mar 2026 10:10:01 +0000 (19:10 +0900)
committerLennart Poettering <lennart@poettering.net>
Sat, 18 Apr 2026 07:56:38 +0000 (09:56 +0200)
It is similar to crypto_random_bytes_allocate_iovec(), but possibly
insecure.

src/basic/random-util.c
src/basic/random-util.h

index d05be6fa501ad3ff9138a01669b79af587b4f72a..0a562238dd173e47e7a4f9f4457a7738722224b6 100644 (file)
@@ -96,6 +96,19 @@ void random_bytes(void *p, size_t n) {
         fallback_random_bytes(p, n);
 }
 
+int random_bytes_allocate_iovec(size_t n, struct iovec *ret) {
+        assert(ret);
+
+        void *p = malloc(MAX(n, 1U));
+        if (!p)
+                return -ENOMEM;
+
+        random_bytes(p, n);
+
+        *ret = IOVEC_MAKE(TAKE_PTR(p), n);
+        return 0;
+}
+
 int crypto_random_bytes(void *p, size_t n) {
         assert(p || n == 0);
 
index c0ed0488e74c8d6401a30440e8a1a4e51ef8ba83..d65c472031704079fc4401a8bdc7b4f193f2ab69 100644 (file)
@@ -3,8 +3,12 @@
 
 #include "basic-forward.h"
 
-void random_bytes(void *p, size_t n) _nonnull_if_nonzero_(1, 2); /* Returns random bytes suitable for most uses, but may be insecure sometimes. */
-int crypto_random_bytes(void *p, size_t n) _nonnull_if_nonzero_(1, 2); /* Returns secure random bytes after waiting for the RNG to initialize. */
+/* Returns random bytes suitable for most uses, but may be insecure sometimes. */
+void random_bytes(void *p, size_t n) _nonnull_if_nonzero_(1, 2);
+int random_bytes_allocate_iovec(size_t n, struct iovec *ret);
+
+/* Returns secure random bytes after waiting for the RNG to initialize. */
+int crypto_random_bytes(void *p, size_t n) _nonnull_if_nonzero_(1, 2);
 int crypto_random_bytes_allocate_iovec(size_t n, struct iovec *ret);
 
 static inline uint64_t random_u64(void) {