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@xxxxxxxxxxxxx> 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#