Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-9]: src/sbin/rndctl Pull up following revision(s) (requested by r...
details: https://anonhg.NetBSD.org/src/rev/28d9b83c5697
branches: netbsd-9
changeset: 964009:28d9b83c5697
user: martin <martin%NetBSD.org@localhost>
date: Wed Jul 15 13:44:08 2020 +0000
description:
Pull up following revision(s) (requested by riastradh in ticket #1006):
sbin/rndctl/rndctl.c: revision 1.32
sbin/rndctl/rndctl.c: revision 1.33
Accept both byte orders for random seed in `rndctl -L'.
The file format was defined with a machine-dependent 32-bit integer
field (the estimated number of bits of entropy in the process that
generated it). Take whichever byte order gives a number that is
reasonable, i.e. lower than the number of bits in the buffer.
Continue to have `rndctl -S' generate it in machine-dependent byte
order for now, so that if you roll back to an older rndctl(8) then
`rndctl -L' on the same machine will still be able to load it with
the right entropy estimate. In a future revision, perhaps we can
change it to be little-endian.
Sort includes.
diffstat:
sbin/rndctl/rndctl.c | 39 ++++++++++++++++++++++++---------------
1 files changed, 24 insertions(+), 15 deletions(-)
diffs (79 lines):
diff -r f3297dc5802d -r 28d9b83c5697 sbin/rndctl/rndctl.c
--- a/sbin/rndctl/rndctl.c Wed Jul 15 13:30:20 2020 +0000
+++ b/sbin/rndctl/rndctl.c Wed Jul 15 13:44:08 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rndctl.c,v 1.30.18.1 2019/12/17 12:45:30 martin Exp $ */
+/* $NetBSD: rndctl.c,v 1.30.18.2 2020/07/15 13:44:08 martin Exp $ */
/*-
* Copyright (c) 1997 Michael Graff.
@@ -28,29 +28,28 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+
#include <sys/cdefs.h>
-#include <sys/types.h>
-#include <sha1.h>
-
#ifndef lint
-__RCSID("$NetBSD: rndctl.c,v 1.30.18.1 2019/12/17 12:45:30 martin Exp $");
+__RCSID("$NetBSD: rndctl.c,v 1.30.18.2 2020/07/15 13:44:08 martin Exp $");
#endif
-
+#include <sys/param.h>
#include <sys/types.h>
+#include <sys/endian.h>
#include <sys/ioctl.h>
-#include <sys/param.h>
#include <sys/rndio.h>
#include <sys/sha3.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <paths.h>
+#include <sha1.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <err.h>
-#include <paths.h>
-#include <string.h>
typedef struct {
const char *a_name;
@@ -192,9 +191,8 @@
MIN(sizeof(rs.data), UINT32_MAX/NBBY)*NBBY);
/*
- * Compute the checksum on the 32-bit entropy count, in host
- * byte order (XXX this means it is not portable across
- * different-endian platforms!), followed by the seed data.
+ * Compute the checksum on the 32-bit entropy count, followed
+ * by the seed data.
*/
SHA1Init(&s);
SHA1Update(&s, (const uint8_t *)&rs.entropy, sizeof(rs.entropy));
@@ -309,6 +307,17 @@
rs.entropy = 0;
}
+ /*
+ * If the entropy is insensibly large, try byte-swapping.
+ * Otherwise assume the file is corrupted and act as though it
+ * has zero entropy.
+ */
+ if (howmany(rs.entropy, NBBY) > sizeof(rs.data)) {
+ rs.entropy = bswap32(rs.entropy);
+ if (howmany(rs.entropy, NBBY) > sizeof(rs.data))
+ rs.entropy = 0;
+ }
+
/* Format the ioctl request. */
rd.len = MIN(sizeof(rd.data), sizeof(rs.data));
rd.entropy = rs.entropy;
Home |
Main Index |
Thread Index |
Old Index