#!/usr/bin/env bash set -euo pipefail TIMEOUT=10 function do_one { local mitigation="$1" local orig local start local now orig=$(cat "$mitigation") start=$(date +%s) now=$start while [[ $((now-start)) -lt "$TIMEOUT" ]] do echo 0 > "$mitigation" echo 1 > "$mitigation" now=$(date +%s) done echo "$orig" > "$mitigation" } rc=0 cd /sys/kernel/debug/powerpc || rc=1 if [[ "$rc" -ne 0 ]]; then echo "Error: couldn't cd to /sys/kernel/debug/powerpc" >&2 exit 1 fi tainted=$(cat /proc/sys/kernel/tainted) if [[ "$tainted" -ne 0 ]]; then echo "Error: kernel already tainted!" >&2 exit 1 fi mitigations="barrier_nospec stf_barrier count_cache_flush rfi_flush entry_flush uaccess_flush" for m in $mitigations do if [[ -f /sys/kernel/debug/powerpc/$m ]] then do_one "$m" & fi done echo "Spawned threads enabling/disabling mitigations ..." if stress-ng > /dev/null 2>&1; then stress="stress-ng" elif stress > /dev/null 2>&1; then stress="stress" else stress="" fi if [[ -n "$stress" ]]; then "$stress" -m "$(nproc)" -t "$TIMEOUT" & echo "Spawned VM stressors ..." fi echo "Waiting for timeout ..." wait tainted=$(cat /proc/sys/kernel/tainted) if [[ "$tainted" -ne 0 ]]; then echo "Error: kernel became tainted!" >&2 exit 1 fi echo "OK" exit 0