202 lines · 3.6 KB · Text
RawDownload
#! /bin/sh# SPDX-License-Identifier: GPL-2.0## Randy Dunlap <rdunlap@infradead.org>, 2018# Thorsten Leemhuis <linux@leemhuis.info>, 2018 usage(){	cat <<EOFusage: ${0##*/}       ${0##*/} <int> Call without parameters to decode /proc/sys/kernel/tainted. Call with a positive integer as parameter to decode a value youretrieved 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	fielse	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"	exitelse	echo "Kernel is \"tainted\" for the following reasons:"fi T=$taintout= 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)" fiT=`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 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#