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