Commit 8eea4e74 authored by Jason Gunthorpe's avatar Jason Gunthorpe
Browse files

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: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
Reviewed-by: default avatarShannon Nelson <shannon.nelson@amd.com>
Tested-by: default avatarDave Jiang <dave.jiang@intel.com>
Tested-by: default avatarShannon Nelson <shannon.nelson@amd.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
parent fb39e909
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -101,6 +101,7 @@ Bit Log Number Reason that got the kernel tainted
 16  _/X   65536  auxiliary taint, defined for and used by distros
 17  _/T  131072  kernel was built with the struct randomization plugin
 18  _/N  262144  an in-kernel test has been run
 19  _/J  524288  userspace used a mutating debug operation in fwctl
===  ===  ======  ========================================================

Note: The character ``_`` is representing a blank in this table to make reading
@@ -184,3 +185,7 @@ More detailed explanation for tainting
     build time.

 18) ``N`` if an in-kernel test, such as a KUnit test, has been run.

 19) ``J`` if userpace opened /dev/fwctl/* and performed a FWTCL_RPC_DEBUG_WRITE
     to use the devices debugging features. Device debugging features could
     cause the device to malfunction in undefined ways.
+2 −1
Original line number Diff line number Diff line
@@ -74,7 +74,8 @@ static inline void set_arch_panic_timeout(int timeout, int arch_default_timeout)
#define TAINT_AUX			16
#define TAINT_RANDSTRUCT		17
#define TAINT_TEST			18
#define TAINT_FLAGS_COUNT		19
#define TAINT_FWCTL			19
#define TAINT_FLAGS_COUNT		20
#define TAINT_FLAGS_MAX			((1UL << TAINT_FLAGS_COUNT) - 1)

struct taint_flag {
+1 −0
Original line number Diff line number Diff line
@@ -511,6 +511,7 @@ const struct taint_flag taint_flags[TAINT_FLAGS_COUNT] = {
	TAINT_FLAG(AUX,				'X', ' ', true),
	TAINT_FLAG(RANDSTRUCT,			'T', ' ', true),
	TAINT_FLAG(TEST,			'N', ' ', true),
	TAINT_FLAG(FWCTL,			'J', ' ', true),
};

#undef TAINT_FLAG
+8 −0
Original line number Diff line number Diff line
@@ -204,6 +204,14 @@ else
	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"