mirror of
https://github.com/opnsense/src.git
synced 2026-02-28 20:30:57 -05:00
/etc/rc.d/dumpon runs before /etc/rc.d/swap. When encrypted swap is in use the .eli or .bde device will not exist at the time dumpon runs. Even if this is addressed it does not make sense to dump core to encrypted swap, as the encryption key will not be available after reboot rendering the dump useless. Thus, for the case that dumpdev=AUTO and encrypted swap is in use, strip the extension and use the underlying device. Emit a warning if we are using the underlying device and the user has not configured dump encryption, so that the user knows that the will not be encrypted. PR: 238301 Reported by: Ivan Rozhuk Reviewed by: jilles MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D34474
98 lines
1.7 KiB
Bash
Executable file
98 lines
1.7 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
# PROVIDE: dumpon
|
|
# BEFORE: disks
|
|
# KEYWORD: nojail
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="dumpon"
|
|
desc="Dump kernel corefiles from swap to disk"
|
|
start_cmd="dumpon_start"
|
|
stop_cmd="dumpon_stop"
|
|
|
|
dumpon_try()
|
|
{
|
|
local flags
|
|
|
|
flags=${dumpon_flags}
|
|
if [ -n "${dumppubkey}" ]; then
|
|
warn "The dumppubkey variable is deprecated. Use dumpon_flags."
|
|
flags="${flags} -k ${dumppubkey}"
|
|
fi
|
|
/sbin/dumpon ${flags} "${1}"
|
|
if [ $? -eq 0 ]; then
|
|
# Make a symlink in devfs for savecore
|
|
ln -fs "${1}" /dev/dumpdev
|
|
return 0
|
|
fi
|
|
warn "unable to specify $1 as a dump device"
|
|
return 1
|
|
}
|
|
|
|
dumpon_warn_unencrypted()
|
|
{
|
|
if [ -n "${dumppubkey}" ]; then
|
|
return
|
|
fi
|
|
for flag in ${dumpon_flags}; do
|
|
if [ $flag = -k ]; then
|
|
return
|
|
fi
|
|
done
|
|
warn "Kernel dumps will be written to the swap partition without encryption."
|
|
}
|
|
|
|
dumpon_start()
|
|
{
|
|
# Enable dumpdev so that savecore can see it. Enable it
|
|
# early so a crash early in the boot process can be caught.
|
|
#
|
|
case ${dumpdev} in
|
|
[Nn][Oo] | '')
|
|
;;
|
|
[Aa][Uu][Tt][Oo])
|
|
root_hold_wait
|
|
dev=$(/bin/kenv -q dumpdev)
|
|
if [ -n "${dev}" ] ; then
|
|
dumpon_try "${dev}"
|
|
return $?
|
|
fi
|
|
while read dev mp type more ; do
|
|
[ "${type}" = "swap" ] || continue
|
|
case ${dev} in
|
|
*.bde|*.eli)
|
|
dumpon_warn_unencrypted
|
|
dev=${dev%.*}
|
|
;;
|
|
esac
|
|
[ -c "${dev}" ] || continue
|
|
dumpon_try "${dev}" 2>/dev/null && return 0
|
|
done </etc/fstab
|
|
echo "No suitable dump device was found." 1>&2
|
|
return 1
|
|
;;
|
|
*)
|
|
root_hold_wait
|
|
dumpon_try "${dumpdev}"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
dumpon_stop()
|
|
{
|
|
case ${dumpdev} in
|
|
[Nn][Oo] | '')
|
|
;;
|
|
*)
|
|
rm -f /dev/dumpdev
|
|
/sbin/dumpon -v off
|
|
;;
|
|
esac
|
|
}
|
|
|
|
load_rc_config $name
|
|
run_rc_command "$1"
|