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