forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
3.6 KiB
202 lines
3.6 KiB
#! /bin/sh |
|
# SPDX-License-Identifier: GPL-2.0 |
|
# |
|
# Randy Dunlap <[email protected]>, 2018 |
|
# Thorsten Leemhuis <[email protected]>, 2018 |
|
|
|
usage() |
|
{ |
|
cat <<EOF |
|
usage: ${0##*/} |
|
${0##*/} <int> |
|
|
|
Call without parameters to decode /proc/sys/kernel/tainted. |
|
|
|
Call with a positive integer as parameter to decode a value you |
|
retrieved from /proc/sys/kernel/tainted on another system. |
|
|
|
EOF |
|
} |
|
|
|
if [ "$1"x != "x" ]; then |
|
if [ "$1"x == "--helpx" ] || [ "$1"x == "-hx" ] ; then |
|
usage |
|
exit 1 |
|
elif [ $1 -ge 0 ] 2>/dev/null ; then |
|
taint=$1 |
|
else |
|
echo "Error: Parameter '$1' not a positive integer. Aborting." >&2 |
|
exit 1 |
|
fi |
|
else |
|
TAINTFILE="/proc/sys/kernel/tainted" |
|
if [ ! -r $TAINTFILE ]; then |
|
echo "No file: $TAINTFILE" |
|
exit |
|
fi |
|
|
|
taint=`cat $TAINTFILE` |
|
fi |
|
|
|
if [ $taint -eq 0 ]; then |
|
echo "Kernel not Tainted" |
|
exit |
|
else |
|
echo "Kernel is \"tainted\" for the following reasons:" |
|
fi |
|
|
|
T=$taint |
|
out= |
|
|
|
addout() { |
|
out=$out$1 |
|
} |
|
|
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout "G" |
|
else |
|
addout "P" |
|
echo " * proprietary module was loaded (#0)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "F" |
|
echo " * module was force loaded (#1)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "S" |
|
echo " * kernel running on an out of specification system (#2)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "R" |
|
echo " * module was force unloaded (#3)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "M" |
|
echo " * processor reported a Machine Check Exception (MCE) (#4)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "B" |
|
echo " * bad page referenced or some unexpected page flags (#5)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "U" |
|
echo " * taint requested by userspace application (#6)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "D" |
|
echo " * kernel died recently, i.e. there was an OOPS or BUG (#7)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "A" |
|
echo " * an ACPI table was overridden by user (#8)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "W" |
|
echo " * kernel issued warning (#9)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "C" |
|
echo " * staging driver was loaded (#10)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "I" |
|
echo " * workaround for bug in platform firmware applied (#11)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "O" |
|
echo " * externally-built ('out-of-tree') module was loaded (#12)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "E" |
|
echo " * unsigned module was loaded (#13)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "L" |
|
echo " * soft lockup occurred (#14)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "K" |
|
echo " * kernel has been live patched (#15)" |
|
fi |
|
|
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "X" |
|
echo " * auxiliary taint, defined for and used by distros (#16)" |
|
|
|
fi |
|
T=`expr $T / 2` |
|
if [ `expr $T % 2` -eq 0 ]; then |
|
addout " " |
|
else |
|
addout "T" |
|
echo " * kernel was built with the struct randomization plugin (#17)" |
|
fi |
|
|
|
echo "For a more detailed explanation of the various taint flags see" |
|
echo " Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources" |
|
echo " or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html" |
|
echo "Raw taint value as int/string: $taint/'$out'" |
|
#EOF#
|
|
|