Loading...
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 203 204 205 206 207 208 209 210 211 | #! /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 integer. 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 " * kernel running on an out of specification system (#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 T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "N" echo " * an in-kernel test (such as a KUnit test) has been run (#18)" fi echo "For a more detailed explanation of the various taint flags see" echo " Documentation/admin-guide/tainted-kernels.rst in 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# |