xref: /aosp_15_r20/external/AFLplusplus/afl-persistent-config (revision 08b48e0b10e97b33e7b60c5b6e2243bd915777f2)
1*08b48e0bSAndroid Build Coastguard Worker#!/bin/bash
2*08b48e0bSAndroid Build Coastguard Worker# written by jhertz
3*08b48e0bSAndroid Build Coastguard Worker#
4*08b48e0bSAndroid Build Coastguard Worker
5*08b48e0bSAndroid Build Coastguard Workertest "$1" = "-h" -o "$1" = "-hh" -o "$1" = "--help" && {
6*08b48e0bSAndroid Build Coastguard Worker  echo 'afl-persistent-config'
7*08b48e0bSAndroid Build Coastguard Worker  echo
8*08b48e0bSAndroid Build Coastguard Worker  echo $0
9*08b48e0bSAndroid Build Coastguard Worker  echo
10*08b48e0bSAndroid Build Coastguard Worker  echo afl-persistent-config has no command line options
11*08b48e0bSAndroid Build Coastguard Worker  echo
12*08b48e0bSAndroid Build Coastguard Worker  echo afl-persistent-config permanently reconfigures the system to a high performance fuzzing state.
13*08b48e0bSAndroid Build Coastguard Worker  echo "WARNING: this reduces the security of the system!"
14*08b48e0bSAndroid Build Coastguard Worker  echo
15*08b48e0bSAndroid Build Coastguard Worker  echo Note that there is also afl-system-config which sets additional runtime
16*08b48e0bSAndroid Build Coastguard Worker  echo configuration options.
17*08b48e0bSAndroid Build Coastguard Worker  exit 0
18*08b48e0bSAndroid Build Coastguard Worker}
19*08b48e0bSAndroid Build Coastguard Worker
20*08b48e0bSAndroid Build Coastguard Workerif [ $# -ne 0 ]; then
21*08b48e0bSAndroid Build Coastguard Worker  echo "ERROR: Unknown option(s): $@"
22*08b48e0bSAndroid Build Coastguard Worker  exit 1
23*08b48e0bSAndroid Build Coastguard Workerfi
24*08b48e0bSAndroid Build Coastguard Worker
25*08b48e0bSAndroid Build Coastguard Workerecho
26*08b48e0bSAndroid Build Coastguard Workerecho "WARNING: This scripts makes permanent configuration changes to the system to"
27*08b48e0bSAndroid Build Coastguard Workerecho "         increase the performance for fuzzing. As a result, the system also"
28*08b48e0bSAndroid Build Coastguard Workerecho "         becomes less secure against attacks! If you use this script, setup"
29*08b48e0bSAndroid Build Coastguard Workerecho "         strong firewall rules and only make SSH available as a network"
30*08b48e0bSAndroid Build Coastguard Workerecho "         service!"
31*08b48e0bSAndroid Build Coastguard Workerecho
32*08b48e0bSAndroid Build Coastguard Workerecho -n "Type \"YES\" to continue: "
33*08b48e0bSAndroid Build Coastguard Workerread ANSWER
34*08b48e0bSAndroid Build Coastguard Workerif [[ "$ANSWER" != "YES" ]]; then
35*08b48e0bSAndroid Build Coastguard Worker  echo Input was not YES, aborting ...
36*08b48e0bSAndroid Build Coastguard Worker  exit 1
37*08b48e0bSAndroid Build Coastguard Workerfi
38*08b48e0bSAndroid Build Coastguard Worker
39*08b48e0bSAndroid Build Coastguard Workerecho
40*08b48e0bSAndroid Build Coastguard WorkerPLATFORM=`uname -s`
41*08b48e0bSAndroid Build Coastguard WorkerARCH=`uname -m`
42*08b48e0bSAndroid Build Coastguard Worker
43*08b48e0bSAndroid Build Coastguard Worker# check that we're on Mac
44*08b48e0bSAndroid Build Coastguard Workerif [[ "$PLATFORM" = "Darwin" ]] ; then
45*08b48e0bSAndroid Build Coastguard Worker
46*08b48e0bSAndroid Build Coastguard Worker  # check if UID == 0
47*08b48e0bSAndroid Build Coastguard Worker  if [[ "$EUID" -ne 0 ]]; then
48*08b48e0bSAndroid Build Coastguard Worker    echo "You need to be root to do this. E.g. use \"sudo\""
49*08b48e0bSAndroid Build Coastguard Worker    exit 1
50*08b48e0bSAndroid Build Coastguard Worker  fi
51*08b48e0bSAndroid Build Coastguard Worker
52*08b48e0bSAndroid Build Coastguard Worker  # check if SIP is disabled
53*08b48e0bSAndroid Build Coastguard Worker  if [[ ! $(csrutil status | grep "disabled") ]]; then
54*08b48e0bSAndroid Build Coastguard Worker    echo "SIP needs to be disabled. Restart and press Command-R at reboot, Utilities => Terminal => enter \"csrutil disable\""
55*08b48e0bSAndroid Build Coastguard Worker    exit 1
56*08b48e0bSAndroid Build Coastguard Worker  fi
57*08b48e0bSAndroid Build Coastguard Worker
58*08b48e0bSAndroid Build Coastguard Worker  echo "Checks passed."
59*08b48e0bSAndroid Build Coastguard Worker
60*08b48e0bSAndroid Build Coastguard Worker  echo "Installing /Library/LaunchDaemons/shm_setup.plist"
61*08b48e0bSAndroid Build Coastguard Worker
62*08b48e0bSAndroid Build Coastguard Worker  cat << EOF > /Library/LaunchDaemons/shm_setup.plist
63*08b48e0bSAndroid Build Coastguard Worker<?xml version="1.0" encoding="UTF-8"?>
64*08b48e0bSAndroid Build Coastguard Worker<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
65*08b48e0bSAndroid Build Coastguard Worker<plist version="1.0">
66*08b48e0bSAndroid Build Coastguard Worker  <dict>
67*08b48e0bSAndroid Build Coastguard Worker    <key>Label</key>
68*08b48e0bSAndroid Build Coastguard Worker    <string>shmemsetup</string>
69*08b48e0bSAndroid Build Coastguard Worker    <key>UserName</key>
70*08b48e0bSAndroid Build Coastguard Worker    <string>root</string>
71*08b48e0bSAndroid Build Coastguard Worker    <key>GroupName</key>
72*08b48e0bSAndroid Build Coastguard Worker    <string>wheel</string>
73*08b48e0bSAndroid Build Coastguard Worker    <key>ProgramArguments</key>
74*08b48e0bSAndroid Build Coastguard Worker    <array>
75*08b48e0bSAndroid Build Coastguard Worker      <string>/usr/sbin/sysctl</string>
76*08b48e0bSAndroid Build Coastguard Worker      <string>-w</string>
77*08b48e0bSAndroid Build Coastguard Worker      <string>kern.sysv.shmmax=524288000</string>
78*08b48e0bSAndroid Build Coastguard Worker      <string>kern.sysv.shmmin=1</string>
79*08b48e0bSAndroid Build Coastguard Worker      <string>kern.sysv.shmmni=128</string>
80*08b48e0bSAndroid Build Coastguard Worker      <string>kern.sysv.shmseg=48</string>
81*08b48e0bSAndroid Build Coastguard Worker      <string>kern.sysv.shmall=131072000</string>
82*08b48e0bSAndroid Build Coastguard Worker    </array>
83*08b48e0bSAndroid Build Coastguard Worker    <key>KeepAlive</key>
84*08b48e0bSAndroid Build Coastguard Worker    <false/>
85*08b48e0bSAndroid Build Coastguard Worker    <key>RunAtLoad</key>
86*08b48e0bSAndroid Build Coastguard Worker    <true/>
87*08b48e0bSAndroid Build Coastguard Worker  </dict>
88*08b48e0bSAndroid Build Coastguard Worker</plist>
89*08b48e0bSAndroid Build Coastguard WorkerEOF
90*08b48e0bSAndroid Build Coastguard Worker
91*08b48e0bSAndroid Build Coastguard Worker  if [[ "$ARCH" = "x86_64" ]]; then
92*08b48e0bSAndroid Build Coastguard Worker    echo "Disabling ASLR system wide"
93*08b48e0bSAndroid Build Coastguard Worker    nvram boot-args="no_aslr=1"
94*08b48e0bSAndroid Build Coastguard Worker  else
95*08b48e0bSAndroid Build Coastguard Worker    echo NOTICE: on ARM64 we do not know currently how to disable system wide ASLR, please report if you know how.
96*08b48e0bSAndroid Build Coastguard Worker  fi
97*08b48e0bSAndroid Build Coastguard Worker
98*08b48e0bSAndroid Build Coastguard Worker  echo
99*08b48e0bSAndroid Build Coastguard Worker  echo "Reboot and enjoy your fuzzing"
100*08b48e0bSAndroid Build Coastguard Worker  exit 0
101*08b48e0bSAndroid Build Coastguard Workerfi
102*08b48e0bSAndroid Build Coastguard Worker
103*08b48e0bSAndroid Build Coastguard Workerif [[ "$PLATFORM" = "Linux" ]] ; then
104*08b48e0bSAndroid Build Coastguard Worker
105*08b48e0bSAndroid Build Coastguard Worker  # check if UID == 0
106*08b48e0bSAndroid Build Coastguard Worker  if [[ "$EUID" -ne 0 ]]; then
107*08b48e0bSAndroid Build Coastguard Worker    echo "You need to be root to do this. E.g. use \"sudo\""
108*08b48e0bSAndroid Build Coastguard Worker    exit 1
109*08b48e0bSAndroid Build Coastguard Worker  fi
110*08b48e0bSAndroid Build Coastguard Worker
111*08b48e0bSAndroid Build Coastguard Worker  echo "Checks passed."
112*08b48e0bSAndroid Build Coastguard Worker
113*08b48e0bSAndroid Build Coastguard Worker  test -d /etc/sysctl.d || echo Error: /etc/sysctl.d directory not found, cannot install shmem config
114*08b48e0bSAndroid Build Coastguard Worker  test -d /etc/sysctl.d -a '!' -e /etc/sysctl.d/99-fuzzing.conf && {
115*08b48e0bSAndroid Build Coastguard Worker    echo "Installing /etc/sysctl.d/99-fuzzing.conf"
116*08b48e0bSAndroid Build Coastguard Worker    cat << EOF > /etc/sysctl.d/99-fuzzing.conf
117*08b48e0bSAndroid Build Coastguard Workerkernel.core_uses_pid=0
118*08b48e0bSAndroid Build Coastguard Workerkernel.core_pattern=core
119*08b48e0bSAndroid Build Coastguard Workerkernel.randomize_va_space=0
120*08b48e0bSAndroid Build Coastguard Workerkernel.sched_child_runs_first=1
121*08b48e0bSAndroid Build Coastguard Workerkernel.sched_autogroup_enabled=1
122*08b48e0bSAndroid Build Coastguard Workerkernel.sched_migration_cost_ns=50000000
123*08b48e0bSAndroid Build Coastguard Workerkernel.sched_latency_ns=250000000
124*08b48e0bSAndroid Build Coastguard WorkerEOF
125*08b48e0bSAndroid Build Coastguard Worker  }
126*08b48e0bSAndroid Build Coastguard Worker
127*08b48e0bSAndroid Build Coastguard Worker  grep -E -q '^GRUB_CMDLINE_LINUX_DEFAULT=' /etc/default/grub 2>/dev/null || echo Error: /etc/default/grub with GRUB_CMDLINE_LINUX_DEFAULT is not present, cannot set boot options
128*08b48e0bSAndroid Build Coastguard Worker  grep -E -q '^GRUB_CMDLINE_LINUX_DEFAULT=' /etc/default/grub 2>/dev/null && {
129*08b48e0bSAndroid Build Coastguard Worker    grep -E '^GRUB_CMDLINE_LINUX_DEFAULT=' /etc/default/grub | grep -E -q 'noibrs pcid nopti' || {
130*08b48e0bSAndroid Build Coastguard Worker      echo "Configuring performance boot options"
131*08b48e0bSAndroid Build Coastguard Worker      LINE=`grep -E '^GRUB_CMDLINE_LINUX_DEFAULT=' /etc/default/grub | sed 's/^GRUB_CMDLINE_LINUX_DEFAULT=//' | tr -d '"'`
132*08b48e0bSAndroid Build Coastguard Worker      OPTIONS="$LINE ibpb=off ibrs=off kpti=off l1tf=off mds=off mitigations=off no_stf_barrier noibpb noibrs pcid nopti nospec_store_bypass_disable nospectre_v1 nospectre_v2 pcid=on pti=off spec_store_bypass_disable=off spectre_v2=off stf_barrier=off srbds=off noexec=off noexec32=off tsx=on tsx=on tsx_async_abort=off mitigations=off audit=0 hardened_usercopy=off ssbd=force-off"
133*08b48e0bSAndroid Build Coastguard Worker      echo Setting boot options in /etc/default/grub to GRUB_CMDLINE_LINUX_DEFAULT=\"$OPTIONS\"
134*08b48e0bSAndroid Build Coastguard Worker      sed -i "s|^GRUB_CMDLINE_LINUX_DEFAULT=.*|GRUB_CMDLINE_LINUX_DEFAULT=\"$OPTIONS\"|" /etc/default/grub
135*08b48e0bSAndroid Build Coastguard Worker    }
136*08b48e0bSAndroid Build Coastguard Worker  }
137*08b48e0bSAndroid Build Coastguard Worker
138*08b48e0bSAndroid Build Coastguard Worker  echo
139*08b48e0bSAndroid Build Coastguard Worker  echo "Reboot and enjoy your fuzzing"
140*08b48e0bSAndroid Build Coastguard Worker  exit 0
141*08b48e0bSAndroid Build Coastguard Workerfi
142*08b48e0bSAndroid Build Coastguard Worker
143*08b48e0bSAndroid Build Coastguard Worker
144*08b48e0bSAndroid Build Coastguard Worker
145*08b48e0bSAndroid Build Coastguard Workerecho "Error: Unknown platform \"$PLATFORM\", currently supported are Linux and MacOS."
146*08b48e0bSAndroid Build Coastguard Workerexit 1
147