Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6ed31e92 authored by Éric Piel's avatar Éric Piel Committed by Len Brown
Browse files

ACPI: Taint kernel on ACPI table override (format corrected)



When an ACPI table is overridden (for now this can happen only for DSDT)
display a big warning and taint the kernel with flag A.

Signed-off-by: default avatarEric Piel <eric.piel@tremplin-utc.net>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 71fc47a9
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -392,6 +392,13 @@ acpi_os_table_override(struct acpi_table_header * existing_table,
			*new_table = initrd_table;
			*new_table = initrd_table;
	}
	}
#endif
#endif
	if (*new_table != NULL) {
		printk(KERN_WARNING PREFIX "Override [%4.4s-%8.8s], "
			   "this is unsafe: tainting kernel\n",
		       existing_table->signature,
		       existing_table->oem_table_id);
		add_taint(TAINT_OVERRIDDEN_ACPI_TABLE);
	}
	return AE_OK;
	return AE_OK;
}
}


+1 −0
Original line number Original line Diff line number Diff line
@@ -243,6 +243,7 @@ extern enum system_states {
#define TAINT_BAD_PAGE			(1<<5)
#define TAINT_BAD_PAGE			(1<<5)
#define TAINT_USER			(1<<6)
#define TAINT_USER			(1<<6)
#define TAINT_DIE			(1<<7)
#define TAINT_DIE			(1<<7)
#define TAINT_OVERRIDDEN_ACPI_TABLE	(1<<8)


extern void dump_stack(void) __cold;
extern void dump_stack(void) __cold;


+3 −2
Original line number Original line Diff line number Diff line
@@ -161,7 +161,7 @@ const char *print_tainted(void)
{
{
	static char buf[20];
	static char buf[20];
	if (tainted) {
	if (tainted) {
		snprintf(buf, sizeof(buf), "Tainted: %c%c%c%c%c%c%c%c",
		snprintf(buf, sizeof(buf), "Tainted: %c%c%c%c%c%c%c%c%c",
			tainted & TAINT_PROPRIETARY_MODULE ? 'P' : 'G',
			tainted & TAINT_PROPRIETARY_MODULE ? 'P' : 'G',
			tainted & TAINT_FORCED_MODULE ? 'F' : ' ',
			tainted & TAINT_FORCED_MODULE ? 'F' : ' ',
			tainted & TAINT_UNSAFE_SMP ? 'S' : ' ',
			tainted & TAINT_UNSAFE_SMP ? 'S' : ' ',
@@ -169,7 +169,8 @@ const char *print_tainted(void)
			tainted & TAINT_MACHINE_CHECK ? 'M' : ' ',
			tainted & TAINT_MACHINE_CHECK ? 'M' : ' ',
			tainted & TAINT_BAD_PAGE ? 'B' : ' ',
			tainted & TAINT_BAD_PAGE ? 'B' : ' ',
			tainted & TAINT_USER ? 'U' : ' ',
			tainted & TAINT_USER ? 'U' : ' ',
			tainted & TAINT_DIE ? 'D' : ' ');
			tainted & TAINT_DIE ? 'D' : ' ',
			tainted & TAINT_OVERRIDDEN_ACPI_TABLE ? 'A' : ' ');
	}
	}
	else
	else
		snprintf(buf, sizeof(buf), "Not tainted");
		snprintf(buf, sizeof(buf), "Not tainted");