Back to home page

OSCL-LXR

 
 

    


0001 #! /bin/sh
0002 # SPDX-License-Identifier: GPL-2.0
0003 #
0004 # Randy Dunlap <rdunlap@infradead.org>, 2018
0005 # Thorsten Leemhuis <linux@leemhuis.info>, 2018
0006 
0007 usage()
0008 {
0009         cat <<EOF
0010 usage: ${0##*/}
0011        ${0##*/} <int>
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 #EOF#