29e3ea8cbd
Previously when mapping kernel memory on radix, no ptesync was included which would periodically lead to unhandled spurious faults. Mapping kernel memory is used when code patching with Strict RWX enabled. As suggested by Chris Riedl, turning ftrace on and off does a large amount of code patching so is a convenient way to see this kind of fault. Add a selftest to try and trigger this kind of a spurious fault. It tests for 30 seconds which is usually long enough for the issue to show up. Signed-off-by: Jordan Niethe <jniethe5@gmail.com> [mpe: Rename it to better reflect what it does, rather than the symptom] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20210208032957.1232102-2-jniethe5@gmail.com
50 lines
1.0 KiB
Bash
Executable File
50 lines
1.0 KiB
Bash
Executable File
#!/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
|