@@ -8,6 +8,32 @@
static unsigned int taint_mask = -1;
+const char *tst_strtaint(int err)
+{
+ static const struct pair taint_pairs[] = {
+ STRPAIR(TST_TAINT_A, "A (ACPI table overridden)")
+ STRPAIR(TST_TAINT_B, "B (Bad page reference)")
+ STRPAIR(TST_TAINT_C, "C (Staging driver loaded)")
+ STRPAIR(TST_TAINT_D, "D (OOPS/BUG)")
+ STRPAIR(TST_TAINT_E, "E (Unsigned module loaded)")
+ STRPAIR(TST_TAINT_F, "F (Module force loaded)")
+ STRPAIR(TST_TAINT_G, "G (Propriety module loaded)")
+ STRPAIR(TST_TAINT_I, "I (Workaround BIOS/FW bug)")
+ STRPAIR(TST_TAINT_K, "K (Live patched)")
+ STRPAIR(TST_TAINT_L, "L (Soft lock up occured)")
+ STRPAIR(TST_TAINT_M, "M (Machine check exception)")
+ STRPAIR(TST_TAINT_O, "O (Out of tree module loaded)")
+ STRPAIR(TST_TAINT_R, "R (Module force unloaded)")
+ STRPAIR(TST_TAINT_S, "S (Running on out of spec system)")
+ STRPAIR(TST_TAINT_T, "T (Built with struct randomization)")
+ STRPAIR(TST_TAINT_U, "U (User request)")
+ STRPAIR(TST_TAINT_W, "W (Warning)")
+ STRPAIR(TST_TAINT_X, "X (Auxilary)")
+ };
+
+ PAIR_LOOKUP(taint_pairs, err);
+}
+
static unsigned int tst_taint_read(void)
{
unsigned int val;
@@ -90,7 +116,8 @@ void tst_taint_init(unsigned int mask)
}
if ((taint & taint_mask) != 0)
- tst_brk(TBROK, "Kernel is already tainted: %u", taint);
+ tst_brk(TBROK, "Kernel is already tainted: %s",
+ tst_strtaint(taint));
}