| #!/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 |