[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: [PATCH v3] getrandom: new applet
From: Etienne CHAMPETIER <champetier.etienne () gmail ! com>
Date: 2016-06-29 15:32:15
Message-ID: 1467214335-13627-1-git-send-email-champetier.etienne () gmail ! com
[Download RAW message or body]
first user of this applet will be LEDE (OpenWrt) to save an urandom seed
using getrandom() (so we are sure /dev/urandom pool is initialized)
function old new delta
getrandom_main - 162 +162
.rodata 156181 156208 +27
applet_names 2536 2546 +10
applet_main 2936 2944 +8
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 3/0 up/down: 207/0) Total: 207 bytes
v2: reduce size by 40 bytes thanks to Tito <farmatito@tiscali.it>
v3: release under GPLv2 or later, thanks Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Signed-off-by: Etienne CHAMPETIER <champetier.etienne@gmail.com>
---
include/applets.src.h | 1 +
util-linux/Config.src | 8 ++++++++
util-linux/Kbuild.src | 1 +
util-linux/getrandom.c | 43 +++++++++++++++++++++++++++++++++++++++++++
4 files changed, 53 insertions(+)
create mode 100644 util-linux/getrandom.c
diff --git a/include/applets.src.h b/include/applets.src.h
index 6e1b02f..b617d14 100644
--- a/include/applets.src.h
+++ b/include/applets.src.h
@@ -153,6 +153,7 @@ IF_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, BB_DIR_USR_BIN, BB_SUID_DROP, ftpput
IF_FUSER(APPLET(fuser, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_GETENFORCE(APPLET(getenforce, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_GETOPT(APPLET(getopt, BB_DIR_BIN, BB_SUID_DROP))
+IF_GETRANDOM(APPLET(getrandom, BB_DIR_USR_BIN, BB_SUID_DROP))
IF_GETSEBOOL(APPLET(getsebool, BB_DIR_USR_SBIN, BB_SUID_DROP))
IF_HD(APPLET_NOEXEC(hd, hexdump, BB_DIR_USR_BIN, BB_SUID_DROP, hd))
IF_HDPARM(APPLET(hdparm, BB_DIR_SBIN, BB_SUID_DROP))
diff --git a/util-linux/Config.src b/util-linux/Config.src
index 922cabd..9f47db7 100644
--- a/util-linux/Config.src
+++ b/util-linux/Config.src
@@ -304,6 +304,14 @@ config FEATURE_GETOPT_LONG
help
Enable support for long options (option -l).
+config GETRANDOM
+ bool "getrandom"
+ default y
+ select PLATFORM_LINUX
+ help
+ The getrandom utility get NBYTES random bytes using getrandom()
+ syscall (available since Linux 3.17)
+
config HEXDUMP
bool "hexdump"
default y
diff --git a/util-linux/Kbuild.src b/util-linux/Kbuild.src
index 0b87c52..b164fb7 100644
--- a/util-linux/Kbuild.src
+++ b/util-linux/Kbuild.src
@@ -19,6 +19,7 @@ lib-$(CONFIG_FLOCK) += flock.o
lib-$(CONFIG_FREERAMDISK) += freeramdisk.o
lib-$(CONFIG_FSCK_MINIX) += fsck_minix.o
lib-$(CONFIG_GETOPT) += getopt.o
+lib-$(CONFIG_GETRANDOM) += getrandom.o
lib-$(CONFIG_HEXDUMP) += hexdump.o
lib-$(CONFIG_HWCLOCK) += hwclock.o
lib-$(CONFIG_IPCRM) += ipcrm.o
diff --git a/util-linux/getrandom.c b/util-linux/getrandom.c
new file mode 100644
index 0000000..d61b53a
--- /dev/null
+++ b/util-linux/getrandom.c
@@ -0,0 +1,43 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * getrandom.c - read random bytes using getrandom() syscall
+ *
+ * Copyright (C) 2016 Etienne Champetier <champetier.etienne@gmail.com>
+ *
+ * Licensed under GPLv2 or later, see file LICENSE in this source tree.
+ */
+
+//usage:#define getrandom_trivial_usage
+//usage: "N"
+//usage:#define getrandom_full_usage "\n\n"
+//usage: "Read N random bytes using getrandom()"
+
+#include <sys/syscall.h>
+#include "libbb.h"
+
+int getrandom_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int getrandom_main(int argc, char **argv)
+{
+ int nbytes, len;
+ char buf[256]; /* getrandom(2) calls up to 256 bytes always succeed */
+
+ if (argc != 2)
+ bb_show_usage();
+
+ if (isatty(STDOUT_FILENO))
+ bb_error_msg_and_die("isatty");
+
+ nbytes = xatoi_range(argv[1], 1, INT_MAX);
+
+ for (len = sizeof(buf); nbytes > 0; nbytes -= sizeof(buf)) {
+ if (nbytes < sizeof(buf)) {
+ len = nbytes;
+ }
+ if (syscall(SYS_getrandom, buf, len, 0) != len) {
+ bb_perror_msg_and_die("getrandom");
+ }
+ xwrite(STDOUT_FILENO, buf, len);
+ }
+
+ return EXIT_SUCCESS;
+}
--
2.5.5
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic