On Wed, Jun 21, 2017 at 01:13:31PM -0600, Theo de Raadt wrote:
| Future work should be to see if we can build a fresh kernel at
| install/upgrade time, for that "every computer is unique" feel.

How about we move the rc bits out from rc and into a small script
that we call from rc.  Now we can also easily call it from the install
and/or upgrade script with something like 

        /mnt/usr/sbin/chroot /mnt /usr/local/libexec/reorder_kernel

and have a new kernel always.  Not sure if that's feasible in this
case, but it looks doable.  Here's the diff that moves the rc bits
into a separate script.  Not included are the bits for the install
script.


Index: etc/rc
===================================================================
RCS file: /cvs/src/etc/rc,v
retrieving revision 1.504
diff -u -p -u -r1.504 rc
--- etc/rc      22 Jun 2017 16:03:36 -0000      1.504
+++ etc/rc      23 Jun 2017 07:58:50 -0000
@@ -219,38 +219,6 @@ reorder_libs() {
        fi
 }
 
-# Re-link the kernel, placing the objects in a random order.
-# Replace current with relinked kernel and inform root about it.
-reorder_kernel() {
-       (
-       set -e
-       _compile_dir=/usr/share/compile
-       _kernel=$(sysctl -n kern.osversion)
-       _kernel=${_kernel%#*}
-       _kernel_dir=$_compile_dir/$_kernel
-       _sha256=/var/db/kernel.SHA256
-
-       if [[ -f /usr/share/compile.tgz ]]; then
-               rm -rf $_compile_dir
-               mkdir -m 700 -p $_compile_dir
-               tar -C $_compile_dir -xzf /usr/share/compile.tgz $_kernel
-               rm -f /usr/share/compile.tgz
-       fi
-
-       sha256 -q -C $_sha256 /bsd
-
-       cd $_kernel_dir
-       make newbsd   >$_kernel_dir/log 2>&1
-       make newinstall >>$_kernel_dir/log 2>&1
-       (umask 077 && sha256 -h $_sha256 /bsd)
-
-       (echo "Kernel has been relinked and is active on next reboot\n"; \
-               cat $_sha256; echo "\nRelink log:\n"; cat $_kernel_dir/log ) |
-               mail -Es "$(hostname) Kernel relink info" root >/dev/null
-
-       ) >/dev/null 2>&1 &
-}
-
 # Run rc.* script and email output to root.
 # Usage: run_upgrade_script firsttime|sysmerge
 run_upgrade_script() {
@@ -619,7 +587,9 @@ echo -n 'starting local daemons:'
 start_daemon apmd sensorsd hotplugd watchdogd cron wsmoused xenodm
 echo '.'
 
-reorder_kernel
+# Re-link the kernel, placing the objects in a random order.
+# Replace current with relinked kernel and inform root about it.
+/usr/libexec/reorder_kernel
 
 date
 exit 0
Index: libexec/Makefile
===================================================================
RCS file: /cvs/src/libexec/Makefile,v
retrieving revision 1.65
diff -u -p -u -r1.65 Makefile
--- libexec/Makefile    26 Nov 2015 19:13:14 -0000      1.65
+++ libexec/Makefile    23 Jun 2017 07:32:35 -0000
@@ -6,7 +6,7 @@
 SUBDIR= comsat fingerd ftpd getty ld.so lockspool login_chpass \
        login_lchpass login_passwd login_radius login_reject \
        login_skey login_token login_yubikey mail.local \
-       rpc.rquotad rpc.rstatd rpc.rusersd rpc.rwalld \
+       reorder_kernel rpc.rquotad rpc.rstatd rpc.rusersd rpc.rwalld \
        security spamd spamd-setup spamlogd talkd tradcpp
 
 .include <bsd.subdir.mk>
Index: libexec/reorder_kernel/Makefile
===================================================================
RCS file: libexec/reorder_kernel/Makefile
diff -N libexec/reorder_kernel/Makefile
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libexec/reorder_kernel/Makefile     23 Jun 2017 07:56:12 -0000
@@ -0,0 +1,11 @@
+#      $Id$
+
+MAN=   reorder_kernel.8
+
+SCRIPT=        reorder_kernel.sh
+
+realinstall:
+        ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
+           ${.CURDIR}/${SCRIPT} ${DESTDIR}${BINDIR}/reorder-kernel
+
+.include <bsd.prog.mk>
Index: libexec/reorder_kernel/reorder_kernel.8
===================================================================
RCS file: libexec/reorder_kernel/reorder_kernel.8
diff -N libexec/reorder_kernel/reorder_kernel.8
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libexec/reorder_kernel/reorder_kernel.8     23 Jun 2017 07:56:34 -0000
@@ -0,0 +1,13 @@
+.Dd $Mdocdate$
+.Dt REORDER_KERNEL 8
+.Os
+.Sh NAME
+.Nm reorder_kernel
+.Nd build a new /bsd with randomly ordered objects
+.Sh SYNOPSIS
+.Nm reorder_kernel
+.Oc
+.Sh DESCRIPTION
+.Nm
+will take the kernel object files from /usr/share/compile/ and build a
+new randomly ordered /bsd out of them.
Index: libexec/reorder_kernel/reorder_kernel.sh
===================================================================
RCS file: libexec/reorder_kernel/reorder_kernel.sh
diff -N libexec/reorder_kernel/reorder_kernel.sh
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ libexec/reorder_kernel/reorder_kernel.sh    23 Jun 2017 07:53:36 -0000
@@ -0,0 +1,34 @@
+#!/bin/sh -
+#      $Id$
+
+# standard license here; attribution to rpe@?
+
+# Re-link the kernel, placing the objects in a random order.
+# Replace current with relinked kernel and inform root about it.
+(
+       set -e
+       _compile_dir=/usr/share/compile
+       _kernel=$(sysctl -n kern.osversion)
+       _kernel=${_kernel%#*}
+       _kernel_dir=$_compile_dir/$_kernel
+       _sha256=/var/db/kernel.SHA256
+
+       if [[ -f /usr/share/compile.tgz ]]; then
+               rm -rf $_compile_dir
+               mkdir -m 700 -p $_compile_dir
+               tar -C $_compile_dir -xzf /usr/share/compile.tgz $_kernel
+               rm -f /usr/share/compile.tgz
+       fi
+
+       sha256 -q -C $_sha256 /bsd
+
+       cd $_kernel_dir
+       make newbsd   >$_kernel_dir/log 2>&1
+       make newinstall >>$_kernel_dir/log 2>&1
+       (umask 077 && sha256 -h $_sha256 /bsd)
+
+       (echo "Kernel has been relinked and is active on next reboot\n"; \
+               cat $_sha256; echo "\nRelink log:\n"; cat $_kernel_dir/log ) |
+               mail -Es "$(hostname) Kernel relink info" root >/dev/null
+
+) > /dev/null 2>&1

-- 
>++++++++[<++++++++++>-]<+++++++.>+++[<------>-]<.>+++[<+
+++++++++++>-]<.>++[<------------>-]<+.--------------.[-]
                 http://www.weirdnet.nl/                 

Reply via email to