| #!/bin/bash | |
| # SPDX-License-Identifier: GPL-2.0-or-later | |
| TIMEOUT=30 | |
| DEBUFS_DIR=`cat /proc/mounts | grep debugfs | awk '{print $2}'` | |
| if [ ! -e "$DEBUFS_DIR" ] | |
| then | |
| echo "debugfs not found, skipping" 1>&2 | |
| exit 4 | |
| fi | |
| if [ ! -e "$DEBUFS_DIR/tracing/current_tracer" ] | |
| then | |
| echo "Tracing files not found, skipping" 1>&2 | |
| exit 4 | |
| fi | |
| echo "Testing for spurious faults when mapping kernel memory..." | |
| if grep -q "FUNCTION TRACING IS CORRUPTED" "$DEBUFS_DIR/tracing/trace" | |
| then | |
| echo "FAILED: Ftrace already dead. Probably due to a spurious fault" 1>&2 | |
| exit 1 | |
| fi | |
| dmesg -C | |
| START_TIME=`date +%s` | |
| END_TIME=`expr $START_TIME + $TIMEOUT` | |
| while [ `date +%s` -lt $END_TIME ] | |
| do | |
| echo function > $DEBUFS_DIR/tracing/current_tracer | |
| echo nop > $DEBUFS_DIR/tracing/current_tracer | |
| if dmesg | grep -q 'ftrace bug' | |
| then | |
| break | |
| fi | |
| done | |
| echo nop > $DEBUFS_DIR/tracing/current_tracer | |
| if dmesg | grep -q 'ftrace bug' | |
| then | |
| echo "FAILED: Mapping kernel memory causes spurious faults" 1>&2 | |
| exit 1 | |
| else | |
| echo "OK: Mapping kernel memory does not cause spurious faults" | |
| exit 0 | |
| fi |