Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F163361854
D22612.id65076.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D22612.id65076.diff
View Options
Index: head/libexec/save-entropy/save-entropy.sh
===================================================================
--- head/libexec/save-entropy/save-entropy.sh
+++ head/libexec/save-entropy/save-entropy.sh
@@ -71,26 +71,63 @@
for f in saved-entropy.*; do
case "${f}" in saved-entropy.\*) continue ;; esac # No files match
- [ ${f#saved-entropy\.} -ge ${entropy_save_num} ] && unlink ${f}
+ [ ${f#saved-entropy\.} -gt ${entropy_save_num} ] && unlink ${f}
done
-umask 377
+umask 177
-n=$(( ${entropy_save_num} - 1 ))
-while [ ${n} -ge 1 ]; do
- if [ -f "saved-entropy.${n}" ]; then
- mv "saved-entropy.${n}" "saved-entropy.$(( ${n} + 1 ))"
- elif [ -e "saved-entropy.${n}" -o -L "saved-entropy.${n}" ]; then
+# Scan slots [1..$entropy_save_num), picking an empty slot or the oldest
+# existing file if no empty slot was available.
+#
+# 1. Find out the first regular file or empty slot (and its serial number)
+#
+n=1
+while [ ${n} -le ${entropy_save_num} ]; do
+ save_file="saved-entropy.${n}"
+ if [ ! -e "${save_file}" -o -f "${save_file}" ]; then
+ break
+ else
logger -is -t "$0" \
- "${entropy_dir}/saved-entropy.${n}" is not a regular file, and so \
- it will not be rotated. Entropy file rotation is aborted.
- exit 1
+ "${save_file}" is not a regular file, skipped.
fi
- n=$(( ${n} - 1 ))
+ n=$(( ${n} + 1 ))
done
+#
+# 2. Start from (serial number + 1), and check if the slot is empty
+# or is an older regular file, update save_file pointer in either
+# case, and break early if we found an empty slot.
+#
+if [ -f ${save_file} ]; then
+ n=$(( ${n} + 1 ))
+ while [ ${n} -le ${entropy_save_num} ]; do
+ next_file=saved-entropy.${n}
+ if [ -f "${next_file}" ]; then
+ [ "${next_file}" -ot "${save_file}" ] && \
+ save_file="${next_file}"
+ elif [ ! -e "${next_file}" ]; then
+ save_file="${next_file}"
+ break
+ else
+ logger -is -t "$0" \
+ "${next_file}" is not a regular file, skipped.
+ fi
+ n=$(( ${n} + 1 ))
+ done
+fi
+#
+# 3. Check if the pointer we have in hand is really a regular file or
+# an empty slot, and bail out as that means there is no available slot.
+#
+if [ -e "${save_file}" -a ! -f "${save_file}" ]; then
+ logger -is -t "$0" \
+ No available slot in "${entropy_dir}", save entropy is aborted.
+ exit 1
+fi
-dd if=/dev/random of=saved-entropy.1 bs=${entropy_save_sz} count=1 2>/dev/null
-chflags nodump saved-entropy.1 2>/dev/null || :
-fsync saved-entropy.1 "."
+# Save entropy to the selected slot.
+chmod 600 "${save_file}" 2>/dev/null || :
+dd if=/dev/random of="${save_file}" bs=${entropy_save_sz} count=1 2>/dev/null
+chflags nodump "${save_file}" 2>/dev/null || :
+fsync "${save_file}" "."
exit 0
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Jul 23, 12:38 PM (7 h, 37 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35402229
Default Alt Text
D22612.id65076.diff (2 KB)
Attached To
Mode
D22612: Reduce disk write load in /usr/libexec/save-entropy
Attached
Detach File
Event Timeline
Log In to Comment