xref: /xnu-8796.101.5/san/tools/kasan_install (revision aca3beaa3dfbd42498b42c5e5ce20a938e6554e5)
1*aca3beaaSApple OSS Distributions#!/bin/bash
2*aca3beaaSApple OSS Distributions
3*aca3beaaSApple OSS Distributions#
4*aca3beaaSApple OSS Distributions# kasan_install: set up a system to run the KASan kernel. Run with "--uninstall"
5*aca3beaaSApple OSS Distributions# to reverse the setup.
6*aca3beaaSApple OSS Distributions#
7*aca3beaaSApple OSS Distributions# Adds kcsuffix=kasan to boot-args.
8*aca3beaaSApple OSS Distributions#
9*aca3beaaSApple OSS Distributions
10*aca3beaaSApple OSS Distributions
11*aca3beaaSApple OSS Distributionsif [[ `whoami` != root ]] ; then
12*aca3beaaSApple OSS Distributions	echo "Re-running with sudo"
13*aca3beaaSApple OSS Distributions	sudo "$0" "$@"
14*aca3beaaSApple OSS Distributions	exit $?
15*aca3beaaSApple OSS Distributionsfi
16*aca3beaaSApple OSS Distributions
17*aca3beaaSApple OSS Distributionssip_enabled() {
18*aca3beaaSApple OSS Distributions	csrutil status |grep -q enabled
19*aca3beaaSApple OSS Distributions}
20*aca3beaaSApple OSS Distributions
21*aca3beaaSApple OSS Distributionsprompt() {
22*aca3beaaSApple OSS Distributions	echo -n "$@ [y/N] "
23*aca3beaaSApple OSS Distributions	read ans
24*aca3beaaSApple OSS Distributions	case "$ans" in
25*aca3beaaSApple OSS Distributions		[yY]*) return 0 ;;
26*aca3beaaSApple OSS Distributions		*) return 1 ;;
27*aca3beaaSApple OSS Distributions	esac
28*aca3beaaSApple OSS Distributions}
29*aca3beaaSApple OSS Distributions
30*aca3beaaSApple OSS Distributionskasan_install() {
31*aca3beaaSApple OSS Distributions
32*aca3beaaSApple OSS Distributions	dobootargs=0
33*aca3beaaSApple OSS Distributions
34*aca3beaaSApple OSS Distributions	echo -n "Checking KASan boot args... "
35*aca3beaaSApple OSS Distributions
36*aca3beaaSApple OSS Distributions	bootargs=$(nvram boot-args | cut -f2)
37*aca3beaaSApple OSS Distributions	cursuffix=$(echo $bootargs | sed -n 's/.*kcsuffix=\([^ ]\)/\1/p')
38*aca3beaaSApple OSS Distributions
39*aca3beaaSApple OSS Distributions	if [[ "$cursuffix" == kasan ]] ; then
40*aca3beaaSApple OSS Distributions		echo "already set."
41*aca3beaaSApple OSS Distributions	elif [[ -n "$cursuffix" ]] ; then
42*aca3beaaSApple OSS Distributions		prompt "custom kcsuffix ($cursuffix) is set. Overwrite?" && {
43*aca3beaaSApple OSS Distributions			bootargs=$(echo "$bootargs" | sed 's/[ ]*kcsuffix=[^ ]*//')
44*aca3beaaSApple OSS Distributions			dobootargs=1
45*aca3beaaSApple OSS Distributions		}
46*aca3beaaSApple OSS Distributions	else
47*aca3beaaSApple OSS Distributions		prompt "not set. Modify?" && {
48*aca3beaaSApple OSS Distributions			dobootargs=1
49*aca3beaaSApple OSS Distributions		}
50*aca3beaaSApple OSS Distributions	fi
51*aca3beaaSApple OSS Distributions
52*aca3beaaSApple OSS Distributions	[[ $dobootargs -eq 1 ]] && {
53*aca3beaaSApple OSS Distributions		echo -n "Adding boot arg kcsuffix=kasan... "
54*aca3beaaSApple OSS Distributions		newlen=$(echo -n "$bootargs kcsuffix=kasan" |wc -c)
55*aca3beaaSApple OSS Distributions		if [[ $newlen -ge 512 ]] ; then
56*aca3beaaSApple OSS Distributions			echo "boot-args too long. Bailing."
57*aca3beaaSApple OSS Distributions			exit 3
58*aca3beaaSApple OSS Distributions		fi
59*aca3beaaSApple OSS Distributions
60*aca3beaaSApple OSS Distributions		nvram boot-args="$bootargs kcsuffix=kasan" || exit $?
61*aca3beaaSApple OSS Distributions		echo "done."
62*aca3beaaSApple OSS Distributions	}
63*aca3beaaSApple OSS Distributions
64*aca3beaaSApple OSS Distributions}
65*aca3beaaSApple OSS Distributions
66*aca3beaaSApple OSS Distributions
67*aca3beaaSApple OSS Distributionskasan_uninstall() {
68*aca3beaaSApple OSS Distributions
69*aca3beaaSApple OSS Distributions	echo -n "Removing boot args... "
70*aca3beaaSApple OSS Distributions
71*aca3beaaSApple OSS Distributions	bootargs=$(nvram boot-args | cut -f2)
72*aca3beaaSApple OSS Distributions	cursuffix=$(echo $bootargs | sed -n 's/.*kcsuffix=\([^ ]\)/\1/p')
73*aca3beaaSApple OSS Distributions
74*aca3beaaSApple OSS Distributions	if [[ $cursuffix == "kasan" ]] ; then
75*aca3beaaSApple OSS Distributions		prompt "remove kcsuffix=kasan?" && {
76*aca3beaaSApple OSS Distributions			echo -n "Removing kcsuffix... "
77*aca3beaaSApple OSS Distributions			bootargs=$(echo "$bootargs" | sed 's/[ ]*kcsuffix=[^ ]*//')
78*aca3beaaSApple OSS Distributions			nvram boot-args="$bootargs"
79*aca3beaaSApple OSS Distributions			echo "done."
80*aca3beaaSApple OSS Distributions		}
81*aca3beaaSApple OSS Distributions	else
82*aca3beaaSApple OSS Distributions		echo "not set."
83*aca3beaaSApple OSS Distributions	fi
84*aca3beaaSApple OSS Distributions
85*aca3beaaSApple OSS Distributions}
86*aca3beaaSApple OSS Distributions
87*aca3beaaSApple OSS Distributionscase "$1" in
88*aca3beaaSApple OSS Distributions	*uninstall|*del*|*remove|*rm)
89*aca3beaaSApple OSS Distributions		kasan_uninstall ;;
90*aca3beaaSApple OSS Distributions	*)
91*aca3beaaSApple OSS Distributions		kasan_install ;;
92*aca3beaaSApple OSS Distributionsesac
93