212 lines · plain
1#! /bin/sh2# SPDX-License-Identifier: GPL-2.03#4# Randy Dunlap <rdunlap@infradead.org>, 20185# Thorsten Leemhuis <linux@leemhuis.info>, 20186 7usage()8{9 cat <<EOF10usage: ${0##*/}11 ${0##*/} <int>12 13Call without parameters to decode /proc/sys/kernel/tainted.14 15Call with a positive integer as parameter to decode a value you16retrieved from /proc/sys/kernel/tainted on another system.17 18EOF19}20 21if [ "$1"x != "x" ]; then22 if [ "$1"x == "--helpx" ] || [ "$1"x == "-hx" ] ; then23 usage24 exit 125 elif [ $1 -ge 0 ] 2>/dev/null ; then26 taint=$127 else28 echo "Error: Parameter '$1' not a positive integer. Aborting." >&229 exit 130 fi31else32 TAINTFILE="/proc/sys/kernel/tainted"33 if [ ! -r $TAINTFILE ]; then34 echo "No file: $TAINTFILE"35 exit36 fi37 38 taint=`cat $TAINTFILE`39fi40 41if [ $taint -eq 0 ]; then42 echo "Kernel not Tainted"43 exit44else45 echo "Kernel is \"tainted\" for the following reasons:"46fi47 48T=$taint49out=50 51addout() {52 out=$out$153}54 55if [ `expr $T % 2` -eq 0 ]; then56 addout "G"57else58 addout "P"59 echo " * proprietary module was loaded (#0)"60fi61 62T=`expr $T / 2`63if [ `expr $T % 2` -eq 0 ]; then64 addout " "65else66 addout "F"67 echo " * module was force loaded (#1)"68fi69 70T=`expr $T / 2`71if [ `expr $T % 2` -eq 0 ]; then72 addout " "73else74 addout "S"75 echo " * kernel running on an out of specification system (#2)"76fi77 78T=`expr $T / 2`79if [ `expr $T % 2` -eq 0 ]; then80 addout " "81else82 addout "R"83 echo " * module was force unloaded (#3)"84fi85 86T=`expr $T / 2`87if [ `expr $T % 2` -eq 0 ]; then88 addout " "89else90 addout "M"91 echo " * processor reported a Machine Check Exception (MCE) (#4)"92fi93 94T=`expr $T / 2`95if [ `expr $T % 2` -eq 0 ]; then96 addout " "97else98 addout "B"99 echo " * bad page referenced or some unexpected page flags (#5)"100fi101 102T=`expr $T / 2`103if [ `expr $T % 2` -eq 0 ]; then104 addout " "105else106 addout "U"107 echo " * taint requested by userspace application (#6)"108fi109 110T=`expr $T / 2`111if [ `expr $T % 2` -eq 0 ]; then112 addout " "113else114 addout "D"115 echo " * kernel died recently, i.e. there was an OOPS or BUG (#7)"116fi117 118T=`expr $T / 2`119if [ `expr $T % 2` -eq 0 ]; then120 addout " "121else122 addout "A"123 echo " * an ACPI table was overridden by user (#8)"124fi125 126T=`expr $T / 2`127if [ `expr $T % 2` -eq 0 ]; then128 addout " "129else130 addout "W"131 echo " * kernel issued warning (#9)"132fi133 134T=`expr $T / 2`135if [ `expr $T % 2` -eq 0 ]; then136 addout " "137else138 addout "C"139 echo " * staging driver was loaded (#10)"140fi141 142T=`expr $T / 2`143if [ `expr $T % 2` -eq 0 ]; then144 addout " "145else146 addout "I"147 echo " * workaround for bug in platform firmware applied (#11)"148fi149 150T=`expr $T / 2`151if [ `expr $T % 2` -eq 0 ]; then152 addout " "153else154 addout "O"155 echo " * externally-built ('out-of-tree') module was loaded (#12)"156fi157 158T=`expr $T / 2`159if [ `expr $T % 2` -eq 0 ]; then160 addout " "161else162 addout "E"163 echo " * unsigned module was loaded (#13)"164fi165 166T=`expr $T / 2`167if [ `expr $T % 2` -eq 0 ]; then168 addout " "169else170 addout "L"171 echo " * soft lockup occurred (#14)"172fi173 174T=`expr $T / 2`175if [ `expr $T % 2` -eq 0 ]; then176 addout " "177else178 addout "K"179 echo " * kernel has been live patched (#15)"180fi181 182T=`expr $T / 2`183if [ `expr $T % 2` -eq 0 ]; then184 addout " "185else186 addout "X"187 echo " * auxiliary taint, defined for and used by distros (#16)"188 189fi190 191T=`expr $T / 2`192if [ `expr $T % 2` -eq 0 ]; then193 addout " "194else195 addout "T"196 echo " * kernel was built with the struct randomization plugin (#17)"197fi198 199T=`expr $T / 2`200if [ `expr $T % 2` -eq 0 ]; then201 addout " "202else203 addout "N"204 echo " * an in-kernel test (such as a KUnit test) has been run (#18)"205fi206 207echo "For a more detailed explanation of the various taint flags see"208echo " Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources"209echo " or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html"210echo "Raw taint value as int/string: $taint/'$out'"211#EOF#212