79 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/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
 |