forked from mirrors/linux
		
	 2a2dfc869d
			
		
	
	
		2a2dfc869d
		
	
	
	
	
		
			
			Commit c272612cb4 ("kunit: Taint the kernel when KUnit tests are run")
added a new taint flag for when in-kernel tests run. This commit adds
recognition of this new flag in kernel-chktaint.
With this change the correct reason will be reported if the kernel is
tainted because of a test run.
Amended Commit log: Shuah Khan <skhan@linuxfoundation.org>
Reviewed-by: David Gow <davidgow@google.com>
Signed-off-by: Joe Fradley <joefradley@google.com>
Reviewed-by: Brendan Higgins <brendanhiggins@google.com>
Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
		
	
			
		
			
				
	
	
		
			211 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #! /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#
 |