0001
0002
0003
0004
0005
0006
0007 usage()
0008 {
0009 cat <<EOF
0010 usage: ${0
0011 ${0
0012
0013 Call without parameters to decode /proc/sys/kernel/tainted.
0014
0015 Call with a positive integer as parameter to decode a value you
0016 retrieved from /proc/sys/kernel/tainted on another system.
0017
0018 EOF
0019 }
0020
0021 if [ "$1"x != "x" ]; then
0022 if [ "$1"x == "--helpx" ] || [ "$1"x == "-hx" ] ; then
0023 usage
0024 exit 1
0025 elif [ $1 -ge 0 ] 2>/dev/null ; then
0026 taint=$1
0027 else
0028 echo "Error: Parameter '$1' not a positive integer. Aborting." >&2
0029 exit 1
0030 fi
0031 else
0032 TAINTFILE="/proc/sys/kernel/tainted"
0033 if [ ! -r $TAINTFILE ]; then
0034 echo "No file: $TAINTFILE"
0035 exit
0036 fi
0037
0038 taint=`cat $TAINTFILE`
0039 fi
0040
0041 if [ $taint -eq 0 ]; then
0042 echo "Kernel not Tainted"
0043 exit
0044 else
0045 echo "Kernel is \"tainted\" for the following reasons:"
0046 fi
0047
0048 T=$taint
0049 out=
0050
0051 addout() {
0052 out=$out$1
0053 }
0054
0055 if [ `expr $T % 2` -eq 0 ]; then
0056 addout "G"
0057 else
0058 addout "P"
0059 echo " * proprietary module was loaded (#0)"
0060 fi
0061
0062 T=`expr $T / 2`
0063 if [ `expr $T % 2` -eq 0 ]; then
0064 addout " "
0065 else
0066 addout "F"
0067 echo " * module was force loaded (#1)"
0068 fi
0069
0070 T=`expr $T / 2`
0071 if [ `expr $T % 2` -eq 0 ]; then
0072 addout " "
0073 else
0074 addout "S"
0075 echo " * kernel running on an out of specification system (#2)"
0076 fi
0077
0078 T=`expr $T / 2`
0079 if [ `expr $T % 2` -eq 0 ]; then
0080 addout " "
0081 else
0082 addout "R"
0083 echo " * module was force unloaded (#3)"
0084 fi
0085
0086 T=`expr $T / 2`
0087 if [ `expr $T % 2` -eq 0 ]; then
0088 addout " "
0089 else
0090 addout "M"
0091 echo " * processor reported a Machine Check Exception (MCE) (#4)"
0092 fi
0093
0094 T=`expr $T / 2`
0095 if [ `expr $T % 2` -eq 0 ]; then
0096 addout " "
0097 else
0098 addout "B"
0099 echo " * bad page referenced or some unexpected page flags (#5)"
0100 fi
0101
0102 T=`expr $T / 2`
0103 if [ `expr $T % 2` -eq 0 ]; then
0104 addout " "
0105 else
0106 addout "U"
0107 echo " * taint requested by userspace application (#6)"
0108 fi
0109
0110 T=`expr $T / 2`
0111 if [ `expr $T % 2` -eq 0 ]; then
0112 addout " "
0113 else
0114 addout "D"
0115 echo " * kernel died recently, i.e. there was an OOPS or BUG (#7)"
0116 fi
0117
0118 T=`expr $T / 2`
0119 if [ `expr $T % 2` -eq 0 ]; then
0120 addout " "
0121 else
0122 addout "A"
0123 echo " * an ACPI table was overridden by user (#8)"
0124 fi
0125
0126 T=`expr $T / 2`
0127 if [ `expr $T % 2` -eq 0 ]; then
0128 addout " "
0129 else
0130 addout "W"
0131 echo " * kernel issued warning (#9)"
0132 fi
0133
0134 T=`expr $T / 2`
0135 if [ `expr $T % 2` -eq 0 ]; then
0136 addout " "
0137 else
0138 addout "C"
0139 echo " * staging driver was loaded (#10)"
0140 fi
0141
0142 T=`expr $T / 2`
0143 if [ `expr $T % 2` -eq 0 ]; then
0144 addout " "
0145 else
0146 addout "I"
0147 echo " * workaround for bug in platform firmware applied (#11)"
0148 fi
0149
0150 T=`expr $T / 2`
0151 if [ `expr $T % 2` -eq 0 ]; then
0152 addout " "
0153 else
0154 addout "O"
0155 echo " * externally-built ('out-of-tree') module was loaded (#12)"
0156 fi
0157
0158 T=`expr $T / 2`
0159 if [ `expr $T % 2` -eq 0 ]; then
0160 addout " "
0161 else
0162 addout "E"
0163 echo " * unsigned module was loaded (#13)"
0164 fi
0165
0166 T=`expr $T / 2`
0167 if [ `expr $T % 2` -eq 0 ]; then
0168 addout " "
0169 else
0170 addout "L"
0171 echo " * soft lockup occurred (#14)"
0172 fi
0173
0174 T=`expr $T / 2`
0175 if [ `expr $T % 2` -eq 0 ]; then
0176 addout " "
0177 else
0178 addout "K"
0179 echo " * kernel has been live patched (#15)"
0180 fi
0181
0182 T=`expr $T / 2`
0183 if [ `expr $T % 2` -eq 0 ]; then
0184 addout " "
0185 else
0186 addout "X"
0187 echo " * auxiliary taint, defined for and used by distros (#16)"
0188
0189 fi
0190
0191 T=`expr $T / 2`
0192 if [ `expr $T % 2` -eq 0 ]; then
0193 addout " "
0194 else
0195 addout "T"
0196 echo " * kernel was built with the struct randomization plugin (#17)"
0197 fi
0198
0199 T=`expr $T / 2`
0200 if [ `expr $T % 2` -eq 0 ]; then
0201 addout " "
0202 else
0203 addout "N"
0204 echo " * an in-kernel test (such as a KUnit test) has been run (#18)"
0205 fi
0206
0207 echo "For a more detailed explanation of the various taint flags see"
0208 echo " Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources"
0209 echo " or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html"
0210 echo "Raw taint value as int/string: $taint/'$out'"
0211