Messages in this thread | | | Subject | Re: [PATCH 0/1] RFC: Revamp admin-guide/tainted-kernels.rst to make it more comprehensible | From | Randy Dunlap <> | Date | Mon, 17 Dec 2018 13:06:15 -0800 |
| |
On 12/17/18 10:24 AM, Jonathan Corbet wrote: > Here's an idea if you feel like improving this: rather than putting an > inscrutable program inline, add a taint_status script to scripts/ that > prints out the status in fully human-readable form, with the explanation > for every set bit.
And some people prefer not adding tools that use python, perl, etc.
E.g., I use this shell script (named 'chktaint', which could probably be done better):
(see attachment)
-- ~Randy #! /bin/sh # GPL v2. # Randy Dunlap <rdunlap@infradead.org>
TAINTFILE="/proc/sys/kernel/tainted"
if [ ! -r $TAINTFILE ]; then echo "No file: $TAINTFILE" exit fi
taint=`cat $TAINTFILE` if [ $taint -eq 0 ]; then echo "Kernel not Tainted" exit fi
echo "Raw Taint value: $taint" T=$taint out=
addout() { out=$out$1 }
if [ `expr $T % 2` -eq 0 ]; then addout "G" else addout "P" # Proprietary module was loaded fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "F" # module was force loaded fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "S" # oops on non-supported SMP hardware fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "R" # module was force unloaded fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "M" # Machine Check exception fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "B" # Bad Page reference fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "U" # User taint requested fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "D" # kernel Died, Oops, or Bug fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "A" # ACPI table overridden fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "W" # previous Warning was issued fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "C" # Staging (Crap) module was loaded fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "I" # firmware bug workaround fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "O" # out-of-tree module loaded fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "E" # unsigned module loaded in kernel with signing fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "L" # soft lockup reported fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "K" # kernel has been live-patched fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "X" # auxiliary taint, used by distros fi
T=`expr $T / 2` if [ `expr $T % 2` -eq 0 ]; then addout " " else addout "T" # struct randomization plugin was used fi
echo "Kernel Taint: $out" #EOF#
| |