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