78 lines · 1.4 KB · Shell
RawDownload
#!/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=0cd /sys/kernel/debug/powerpc || rc=1if [[ "$rc" -ne 0 ]]; then    echo "Error: couldn't cd to /sys/kernel/debug/powerpc" >&2    exit 1fi tainted=$(cat /proc/sys/kernel/tainted)if [[ "$tainted" -ne 0 ]]; then    echo "Warning: kernel already tainted! ($tainted)" >&2fi mitigations="barrier_nospec stf_barrier count_cache_flush rfi_flush entry_flush uaccess_flush" for m in $mitigationsdo    if [[ -f /sys/kernel/debug/powerpc/$m ]]    then        do_one "$m" &    fidone 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 orig_tainted=$taintedtainted=$(cat /proc/sys/kernel/tainted)if [[ "$tainted" != "$orig_tainted" ]]; then    echo "Error: kernel newly tainted, before ($orig_tainted) after ($tainted)" >&2    exit 1fi echo "OK"exit 0