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