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