diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-10-05 21:54:31 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-10-05 22:05:02 +0200 |
commit | 5e5f7167943b408ae55736a44908a82056c87780 (patch) | |
tree | b62ed56427ad1274b05edc2a4d995263034b62a9 /guix/build/syscalls.scm | |
parent | aace6f6dba3a0e7dd46146f5c7947b11e1076e5d (diff) |
syscalls: Add 'add-to-entropy-count'.
* guix/build/syscalls.scm (RNDADDTOENTCNT): New variable.
(add-to-entropy-count): New procedure.
* tests/syscalls.scm ("add-to-entropy-count"): New test.
Diffstat (limited to 'guix/build/syscalls.scm')
-rw-r--r-- | guix/build/syscalls.scm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm index f2fdb4d9d1..bbf2531c79 100644 --- a/guix/build/syscalls.scm +++ b/guix/build/syscalls.scm @@ -68,6 +68,7 @@ statfs free-disk-space device-in-use? + add-to-entropy-count processes mkdtemp! @@ -708,6 +709,33 @@ backend device." ;;; +;;; Random. +;;; + +;; From <uapi/linux/random.h>. +(define RNDADDTOENTCNT #x40045201) + +(define (add-to-entropy-count port-or-fd n) + "Add N to the kernel's entropy count (the value that can be read from +/proc/sys/kernel/random/entropy_avail). PORT-OR-FD must correspond to +/dev/urandom or /dev/random. Raise to 'system-error with EPERM when the +caller lacks root privileges." + (let ((fd (if (port? port-or-fd) + (fileno port-or-fd) + port-or-fd)) + (box (make-bytevector (sizeof int)))) + (bytevector-sint-set! box 0 n (native-endianness) + (sizeof int)) + (let-values (((ret err) + (%ioctl fd RNDADDTOENTCNT + (bytevector->pointer box)))) + (unless (zero? err) + (throw 'system-error "add-to-entropy-count" "~A" + (list (strerror err)) + (list err)))))) + + +;;; ;;; Containers. ;;; |