blob: 279be06332be990754490662ee00fa4257cecbda [file] [log] [blame]
Thorsten Leemhuis4ab5a5d2019-01-08 20:40:06 +01001#! /bin/sh
2# SPDX-License-Identifier: GPL-2.0
3#
4# Randy Dunlap <rdunlap@infradead.org>, 2018
5# Thorsten Leemhuis <linux@leemhuis.info>, 2018
6
7usage()
8{
9 cat <<EOF
10usage: ${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 you
16retrieved from /proc/sys/kernel/tainted on another system.
17
18EOF
19}
20
21if [ "$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
Masanari Iida84de8152021-04-02 16:05:14 +090028 echo "Error: Parameter '$1' not a positive integer. Aborting." >&2
Thorsten Leemhuis4ab5a5d2019-01-08 20:40:06 +010029 exit 1
30 fi
31else
32 TAINTFILE="/proc/sys/kernel/tainted"
33 if [ ! -r $TAINTFILE ]; then
34 echo "No file: $TAINTFILE"
35 exit
36 fi
37
38 taint=`cat $TAINTFILE`
39fi
40
41if [ $taint -eq 0 ]; then
42 echo "Kernel not Tainted"
43 exit
44else
45 echo "Kernel is \"tainted\" for the following reasons:"
46fi
47
48T=$taint
49out=
50
51addout() {
52 out=$out$1
53}
54
55if [ `expr $T % 2` -eq 0 ]; then
56 addout "G"
57else
58 addout "P"
59 echo " * proprietary module was loaded (#0)"
60fi
61
62T=`expr $T / 2`
63if [ `expr $T % 2` -eq 0 ]; then
64 addout " "
65else
66 addout "F"
67 echo " * module was force loaded (#1)"
68fi
69
70T=`expr $T / 2`
71if [ `expr $T % 2` -eq 0 ]; then
72 addout " "
73else
74 addout "S"
Mathieu Chouquet-Stringer547f5742020-12-02 16:32:43 +010075 echo " * kernel running on an out of specification system (#2)"
Thorsten Leemhuis4ab5a5d2019-01-08 20:40:06 +010076fi
77
78T=`expr $T / 2`
79if [ `expr $T % 2` -eq 0 ]; then
80 addout " "
81else
82 addout "R"
83 echo " * module was force unloaded (#3)"
84fi
85
86T=`expr $T / 2`
87if [ `expr $T % 2` -eq 0 ]; then
88 addout " "
89else
90 addout "M"
91 echo " * processor reported a Machine Check Exception (MCE) (#4)"
92fi
93
94T=`expr $T / 2`
95if [ `expr $T % 2` -eq 0 ]; then
96 addout " "
97else
98 addout "B"
99 echo " * bad page referenced or some unexpected page flags (#5)"
100fi
101
102T=`expr $T / 2`
103if [ `expr $T % 2` -eq 0 ]; then
104 addout " "
105else
106 addout "U"
107 echo " * taint requested by userspace application (#6)"
108fi
109
110T=`expr $T / 2`
111if [ `expr $T % 2` -eq 0 ]; then
112 addout " "
113else
114 addout "D"
115 echo " * kernel died recently, i.e. there was an OOPS or BUG (#7)"
116fi
117
118T=`expr $T / 2`
119if [ `expr $T % 2` -eq 0 ]; then
120 addout " "
121else
122 addout "A"
123 echo " * an ACPI table was overridden by user (#8)"
124fi
125
126T=`expr $T / 2`
127if [ `expr $T % 2` -eq 0 ]; then
128 addout " "
129else
130 addout "W"
131 echo " * kernel issued warning (#9)"
132fi
133
134T=`expr $T / 2`
135if [ `expr $T % 2` -eq 0 ]; then
136 addout " "
137else
138 addout "C"
139 echo " * staging driver was loaded (#10)"
140fi
141
142T=`expr $T / 2`
143if [ `expr $T % 2` -eq 0 ]; then
144 addout " "
145else
146 addout "I"
147 echo " * workaround for bug in platform firmware applied (#11)"
148fi
149
150T=`expr $T / 2`
151if [ `expr $T % 2` -eq 0 ]; then
152 addout " "
153else
154 addout "O"
155 echo " * externally-built ('out-of-tree') module was loaded (#12)"
156fi
157
158T=`expr $T / 2`
159if [ `expr $T % 2` -eq 0 ]; then
160 addout " "
161else
162 addout "E"
163 echo " * unsigned module was loaded (#13)"
164fi
165
166T=`expr $T / 2`
167if [ `expr $T % 2` -eq 0 ]; then
168 addout " "
169else
170 addout "L"
171 echo " * soft lockup occurred (#14)"
172fi
173
174T=`expr $T / 2`
175if [ `expr $T % 2` -eq 0 ]; then
176 addout " "
177else
178 addout "K"
179 echo " * kernel has been live patched (#15)"
180fi
181
182T=`expr $T / 2`
183if [ `expr $T % 2` -eq 0 ]; then
184 addout " "
185else
186 addout "X"
187 echo " * auxiliary taint, defined for and used by distros (#16)"
188
189fi
Joe Fradley2a2dfc82022-08-23 21:19:33 -0700190
Thorsten Leemhuis4ab5a5d2019-01-08 20:40:06 +0100191T=`expr $T / 2`
192if [ `expr $T % 2` -eq 0 ]; then
193 addout " "
194else
195 addout "T"
196 echo " * kernel was built with the struct randomization plugin (#17)"
197fi
198
Joe Fradley2a2dfc82022-08-23 21:19:33 -0700199T=`expr $T / 2`
200if [ `expr $T % 2` -eq 0 ]; then
201 addout " "
202else
203 addout "N"
204 echo " * an in-kernel test (such as a KUnit test) has been run (#18)"
205fi
206
Thorsten Leemhuis4ab5a5d2019-01-08 20:40:06 +0100207echo "For a more detailed explanation of the various taint flags see"
Colin Ian Kingc0985642021-06-13 21:20:59 +0100208echo " Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources"
Thorsten Leemhuis4ab5a5d2019-01-08 20:40:06 +0100209echo " or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html"
210echo "Raw taint value as int/string: $taint/'$out'"
211#EOF#