summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorTheo Buehler <tb@cvs.openbsd.org>2017-06-26 17:00:50 +0000
committerTheo Buehler <tb@cvs.openbsd.org>2017-06-26 17:00:50 +0000
commit3157a1a45f170e0791a64272357e0bec53c69ea2 (patch)
treeea9a06e75f94ade163ae9261ae668e09b932b0a3 /sys
parent0dfd3caccbbea4c9aa8c02e6fbc8157078ab2cba (diff)
RANDOM1 was subject to rather bad modulus bias. Improve the situation a bit
by implementing an arc4random_uniform(3) clone with beloved jot(1) and using it. discussed with and ok deraadt
Diffstat (limited to 'sys')
-rw-r--r--sys/conf/makegap.sh22
1 files changed, 17 insertions, 5 deletions
diff --git a/sys/conf/makegap.sh b/sys/conf/makegap.sh
index ddf16ffe7e6..e104163fb48 100644
--- a/sys/conf/makegap.sh
+++ b/sys/conf/makegap.sh
@@ -1,16 +1,28 @@
#!/bin/sh -
+random_uniform() {
+ local _upper_bound
+
+ if [[ $1 -gt 0 ]]; then
+ _upper_bound=$(($1 - 1))
+ else
+ _upper_bound=0
+ fi
+
+ echo `jot -r 1 0 $_upper_bound 2>/dev/null`
+}
+
umask 007
PAGE_SIZE=`sysctl -n hw.pagesize`
PAD=$1
GAPDUMMY=$2
-RANDOM1=$((RANDOM % (3 * PAGE_SIZE)))
-RANDOM2=$((RANDOM % PAGE_SIZE))
-RANDOM3=$((RANDOM % PAGE_SIZE))
-RANDOM4=$((RANDOM % PAGE_SIZE))
-RANDOM5=$((RANDOM % PAGE_SIZE))
+RANDOM1=`random_uniform $((3 * PAGE_SIZE))`
+RANDOM2=`random_uniform $PAGE_SIZE`
+RANDOM3=`random_uniform $PAGE_SIZE`
+RANDOM4=`random_uniform $PAGE_SIZE`
+RANDOM5=`random_uniform $PAGE_SIZE`
cat > gap.link << __EOF__