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