mirror of
https://gitlab.com/redhat/centos-stream/src/kernel/centos-stream-9.git
synced 2026-09-09 00:08:12 +08:00
JIRA: https://issues.redhat.com/browse/RHEL-86016 Upstream-status: v6.15-rc1 Conflicts: - Documentation/admin-guide/tainted-kernels.rst Due to the absence of 1b2255db3c22 Documentation: Add detailed explanation for 'N' taint flag (v6.12-rc1) -> Adjust context - include/linux/panic.h Due to RH-only commitd3c11e8d59add Red Hat-specific taint flags -> Merge - kernel/panic.c Due to RH-only commitd3c11e8d59add Red Hat-specific taint flags -> Merge Due to the absence of f36fc96c15bd kernel/panic: initialize taint_flags[] using a macro (v6.11-rc1) -> Adjust format to use old style commit 8eea4e74475804285507c077bec87d40be87ff06 Author: Jason Gunthorpe <jgg@ziepe.ca> Date: Thu Feb 27 20:26:32 2025 -0400 taint: Add TAINT_FWCTL Requesting a fwctl scope of access that includes mutating device debug data will cause the kernel to be tainted. Changing the device operation through things in the debug scope may cause the device to malfunction in undefined ways. This should be reflected in the TAINT flags to help any debuggers understand that something has been done. Link: https://patch.msgid.link/r/4-v5-642aa0c94070+4447f-fwctl_jgg@nvidia.com Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Shannon Nelson <shannon.nelson@amd.com> Tested-by: Dave Jiang <dave.jiang@intel.com> Tested-by: Shannon Nelson <shannon.nelson@amd.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Benjamin Poirier <bpoirier@redhat.com>
220 lines
3.9 KiB
Bash
Executable File
220 lines
3.9 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
|
|
|
|
T=`expr $T / 2`
|
|
if [ `expr $T % 2` -eq 0 ]; then
|
|
addout " "
|
|
else
|
|
addout "J"
|
|
echo " * fwctl's mutating debug interface was used (#19)"
|
|
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#
|