162306a36Sopenharmony_ci#!/usr/bin/env bash 262306a36Sopenharmony_ci 362306a36Sopenharmony_ciset -euo pipefail 462306a36Sopenharmony_ci 562306a36Sopenharmony_ciTIMEOUT=10 662306a36Sopenharmony_ci 762306a36Sopenharmony_cifunction do_one 862306a36Sopenharmony_ci{ 962306a36Sopenharmony_ci local mitigation="$1" 1062306a36Sopenharmony_ci local orig 1162306a36Sopenharmony_ci local start 1262306a36Sopenharmony_ci local now 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci orig=$(cat "$mitigation") 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci start=$(date +%s) 1762306a36Sopenharmony_ci now=$start 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci while [[ $((now-start)) -lt "$TIMEOUT" ]] 2062306a36Sopenharmony_ci do 2162306a36Sopenharmony_ci echo 0 > "$mitigation" 2262306a36Sopenharmony_ci echo 1 > "$mitigation" 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci now=$(date +%s) 2562306a36Sopenharmony_ci done 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci echo "$orig" > "$mitigation" 2862306a36Sopenharmony_ci} 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_circ=0 3162306a36Sopenharmony_cicd /sys/kernel/debug/powerpc || rc=1 3262306a36Sopenharmony_ciif [[ "$rc" -ne 0 ]]; then 3362306a36Sopenharmony_ci echo "Error: couldn't cd to /sys/kernel/debug/powerpc" >&2 3462306a36Sopenharmony_ci exit 1 3562306a36Sopenharmony_cifi 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_citainted=$(cat /proc/sys/kernel/tainted) 3862306a36Sopenharmony_ciif [[ "$tainted" -ne 0 ]]; then 3962306a36Sopenharmony_ci echo "Error: kernel already tainted!" >&2 4062306a36Sopenharmony_ci exit 1 4162306a36Sopenharmony_cifi 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cimitigations="barrier_nospec stf_barrier count_cache_flush rfi_flush entry_flush uaccess_flush" 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cifor m in $mitigations 4662306a36Sopenharmony_cido 4762306a36Sopenharmony_ci if [[ -f /sys/kernel/debug/powerpc/$m ]] 4862306a36Sopenharmony_ci then 4962306a36Sopenharmony_ci do_one "$m" & 5062306a36Sopenharmony_ci fi 5162306a36Sopenharmony_cidone 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ciecho "Spawned threads enabling/disabling mitigations ..." 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciif stress-ng > /dev/null 2>&1; then 5662306a36Sopenharmony_ci stress="stress-ng" 5762306a36Sopenharmony_cielif stress > /dev/null 2>&1; then 5862306a36Sopenharmony_ci stress="stress" 5962306a36Sopenharmony_cielse 6062306a36Sopenharmony_ci stress="" 6162306a36Sopenharmony_cifi 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ciif [[ -n "$stress" ]]; then 6462306a36Sopenharmony_ci "$stress" -m "$(nproc)" -t "$TIMEOUT" & 6562306a36Sopenharmony_ci echo "Spawned VM stressors ..." 6662306a36Sopenharmony_cifi 6762306a36Sopenharmony_ci 6862306a36Sopenharmony_ciecho "Waiting for timeout ..." 6962306a36Sopenharmony_ciwait 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_citainted=$(cat /proc/sys/kernel/tainted) 7262306a36Sopenharmony_ciif [[ "$tainted" -ne 0 ]]; then 7362306a36Sopenharmony_ci echo "Error: kernel became tainted!" >&2 7462306a36Sopenharmony_ci exit 1 7562306a36Sopenharmony_cifi 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ciecho "OK" 7862306a36Sopenharmony_ciexit 0 79