Linux 5.6.12
[linux/fpc-iii.git] / tools / debugging / kernel-chktaint
blob2240cb56e6e5e6ed30a75913d4d5fecbb8f193c3
1 #! /bin/sh
2 # SPDX-License-Identifier: GPL-2.0
4 # Randy Dunlap <rdunlap@infradead.org>, 2018
5 # Thorsten Leemhuis <linux@leemhuis.info>, 2018
7 usage()
9 cat <<EOF
10 usage: ${0##*/}
11 ${0##*/} <int>
13 Call without parameters to decode /proc/sys/kernel/tainted.
15 Call with a positive integer as parameter to decode a value you
16 retrieved from /proc/sys/kernel/tainted on another system.
18 EOF
21 if [ "$1"x != "x" ]; then
22 if [ "$1"x == "--helpx" ] || [ "$1"x == "-hx" ] ; then
23 usage
24 exit 1
25 elif [ $1 -ge 0 ] 2>/dev/null ; then
26 taint=$1
27 else
28 echo "Error: Parameter '$1' not a positive interger. Aborting." >&2
29 exit 1
31 else
32 TAINTFILE="/proc/sys/kernel/tainted"
33 if [ ! -r $TAINTFILE ]; then
34 echo "No file: $TAINTFILE"
35 exit
38 taint=`cat $TAINTFILE`
41 if [ $taint -eq 0 ]; then
42 echo "Kernel not Tainted"
43 exit
44 else
45 echo "Kernel is \"tainted\" for the following reasons:"
48 T=$taint
49 out=
51 addout() {
52 out=$out$1
55 if [ `expr $T % 2` -eq 0 ]; then
56 addout "G"
57 else
58 addout "P"
59 echo " * proprietary module was loaded (#0)"
62 T=`expr $T / 2`
63 if [ `expr $T % 2` -eq 0 ]; then
64 addout " "
65 else
66 addout "F"
67 echo " * module was force loaded (#1)"
70 T=`expr $T / 2`
71 if [ `expr $T % 2` -eq 0 ]; then
72 addout " "
73 else
74 addout "S"
75 echo " * SMP kernel oops on an officially SMP incapable processor (#2)"
78 T=`expr $T / 2`
79 if [ `expr $T % 2` -eq 0 ]; then
80 addout " "
81 else
82 addout "R"
83 echo " * module was force unloaded (#3)"
86 T=`expr $T / 2`
87 if [ `expr $T % 2` -eq 0 ]; then
88 addout " "
89 else
90 addout "M"
91 echo " * processor reported a Machine Check Exception (MCE) (#4)"
94 T=`expr $T / 2`
95 if [ `expr $T % 2` -eq 0 ]; then
96 addout " "
97 else
98 addout "B"
99 echo " * bad page referenced or some unexpected page flags (#5)"
102 T=`expr $T / 2`
103 if [ `expr $T % 2` -eq 0 ]; then
104 addout " "
105 else
106 addout "U"
107 echo " * taint requested by userspace application (#6)"
110 T=`expr $T / 2`
111 if [ `expr $T % 2` -eq 0 ]; then
112 addout " "
113 else
114 addout "D"
115 echo " * kernel died recently, i.e. there was an OOPS or BUG (#7)"
118 T=`expr $T / 2`
119 if [ `expr $T % 2` -eq 0 ]; then
120 addout " "
121 else
122 addout "A"
123 echo " * an ACPI table was overridden by user (#8)"
126 T=`expr $T / 2`
127 if [ `expr $T % 2` -eq 0 ]; then
128 addout " "
129 else
130 addout "W"
131 echo " * kernel issued warning (#9)"
134 T=`expr $T / 2`
135 if [ `expr $T % 2` -eq 0 ]; then
136 addout " "
137 else
138 addout "C"
139 echo " * staging driver was loaded (#10)"
142 T=`expr $T / 2`
143 if [ `expr $T % 2` -eq 0 ]; then
144 addout " "
145 else
146 addout "I"
147 echo " * workaround for bug in platform firmware applied (#11)"
150 T=`expr $T / 2`
151 if [ `expr $T % 2` -eq 0 ]; then
152 addout " "
153 else
154 addout "O"
155 echo " * externally-built ('out-of-tree') module was loaded (#12)"
158 T=`expr $T / 2`
159 if [ `expr $T % 2` -eq 0 ]; then
160 addout " "
161 else
162 addout "E"
163 echo " * unsigned module was loaded (#13)"
166 T=`expr $T / 2`
167 if [ `expr $T % 2` -eq 0 ]; then
168 addout " "
169 else
170 addout "L"
171 echo " * soft lockup occurred (#14)"
174 T=`expr $T / 2`
175 if [ `expr $T % 2` -eq 0 ]; then
176 addout " "
177 else
178 addout "K"
179 echo " * kernel has been live patched (#15)"
182 T=`expr $T / 2`
183 if [ `expr $T % 2` -eq 0 ]; then
184 addout " "
185 else
186 addout "X"
187 echo " * auxiliary taint, defined for and used by distros (#16)"
190 T=`expr $T / 2`
191 if [ `expr $T % 2` -eq 0 ]; then
192 addout " "
193 else
194 addout "T"
195 echo " * kernel was built with the struct randomization plugin (#17)"
198 echo "For a more detailed explanation of the various taint flags see"
199 echo " Documentation/admin-guide/tainted-kernels.rst in the the Linux kernel sources"
200 echo " or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html"
201 echo "Raw taint value as int/string: $taint/'$out'"
202 #EOF#