Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236#! /bin/sh# SPDX-License-Identifier: GPL-2.0## Randy Dunlap <rdunlap@infradead.org>, 2018# Thorsten Leemhuis <linux@leemhuis.info>, 2018
usage(){ cat <<EOFusage: ${0##*/} ${0##*/} <int>
Call without parameters to decode /proc/sys/kernel/tainted.
Call with a positive integer as parameter to decode a value youretrieved 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 fielse 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" exitelse echo "Kernel is \"tainted\" for the following reasons:"fi
T=$taintout=
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
T=`expr $T / 2`if [ `expr $T % 2` -eq 0 ]; then addout " "else addout "N" echo " * an in-kernel test (such as a KUnit test) has been run (#18)"fi
T=`expr $T / 2`if [ `expr $T % 2` -eq 0 ]; then addout " "else addout "J" echo " * fwctl's mutating debug interface was used (#19)"fiecho "Raw taint value as int/string: $taint/'$out'"
# report on any tainted loadable modules[ "$1" = "" ] && [ -r /sys/module/ ] && \ cnt=`grep [A-Z] /sys/module/*/taint | wc -l` || cnt=0
if [ $cnt -ne 0 ]; then echo echo "Tainted modules:" for dir in `ls /sys/module` ; do if [ -r /sys/module/$dir/taint ]; then modtnt=`cat /sys/module/$dir/taint` [ "$modtnt" = "" ] || echo " * $dir ($modtnt)" fi donefi
echoecho "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"#EOF#